class MyWidget : public QWidget
{
public:
MyWidget( QWidget *parent=0, const char *name=0 );
};
這裡的是C++中的繼承方式:
建立一個新類別MyWidget是由QWidget類別繼承過來的
類別中的函數名稱與類別名稱相同的是建構子(constructor)
若沒有加public的情況下,函數預設是private
所以,當宣告一個此類別的物件時,呼叫的是此唯一的建構子(沒有parent為null,且name也是null,因此這一個窗口被初始化為頂層窗口)
注意宣告類別最後大括號後面要加分號
這裡也包括建構子的宣告,等一下才要定義此建構子的實作內容
MyWidget::MyWidget( QWidget *parent, const char *name ) : QWidget( parent, name )
把MyWidget的參數parent與name參數傳送給父元件的建構子的參數parent與name。可以參考這裡
例如:MyWidget w;
當我建立一個MyWidget的物件w,
它呼叫的是預設的建構子
MyWidget( QWidget *parent=0, const char *name=0 );
此時,參數值為parent與name皆為0(null)
並且把此兩個值傳送給父類別QWidget
因為,建構子的parent是0,則表示MyWidget預設是頂層視窗元件
setMinimumSize( 200, 120 );
setMaximumSize( 200, 120 );
設定本視窗元件的最大與最小數值(此例子看起來是鎖定在200,120)
setMinimumSize(200,120)其實也可以看成this.setMinimumSize(200,120)通常我們會把this省略掉
QPushButton *quit = new QPushButton( "Quit", this, "quit" );
quit->setGeometry( 62, 40, 75, 30 );
quit->setFont( QFont( "Times", 18, QFont::Bold ) );
我們在此類別中的建構子中再建立一個QPushButton新的物件
quit是此建構函數的區域變數
當Widget物件被刪除時,QT會自動把所有子物件刪除
而setGeometry是相對父元件的相對位置
connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );
事情上誰會來使用MyWidget
MyWidget並不會知道
因此
為了讓MyWidget與使用程序溝通
Qt提供了一個別名,qApp
這裡的qApp應該就是指下面程式碼的QApplication a( argc, argv );
int main( int argc, char **argv )
{
QApplication a( argc, argv );
MyWidget w;
w.setGeometry( 100, 100, 200, 120 );
a.setMainWidget( &w );
w.show();
return a.exec();
}
這裡我們舉例說明了我們的新子窗口部件,把它設置為主窗口部件,並且執行這個應用程序。
homework:在main中再加入一個MyWidget元件
參考:Qt教程一 —— 第四章:使用窗口元件
沒有留言:
張貼留言