2008年7月8日 星期二

QT-chap 4

此範利是在說明如何透過繼承內定好的視窗元件來建立自己的視窗元件


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教程一 —— 第四章:使用窗口元件

沒有留言: