.tutorials/tutorial/t4/t4.pro
這個範例展示了如何建立你自己的元件,並且描述了如何控制元件大小的最小值及最大值。
#include <QApplication> #include <QFont> #include <QPushButton> #include <QWidget> class MyWidget : public QWidget { public: MyWidget(QWidget *parent = 0); }; MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { setFixedSize(200, 120); QPushButton *quit = new QPushButton(tr("Quit"), this); quit->setGeometry(62, 40, 75, 30); quit->setFont(QFont("Times", 18, QFont::Bold)); connect(quit, SIGNAL(clicked()), qApp, SLOT(quit())); } int main(int argc, char *argv[]) { QApplication app(argc, argv); MyWidget widget; widget.show(); return app.exec(); }
Line by Line Walkthrough
class MyWidget : public QWidget { public: MyWidget(QWidget *parent = 0); };
這裡我們建立了一個新的類別。因為這個類別繼承自 QWidget,所以這個新類別是個元件,並且可以為一個最上層的視窗或是一個子元件(就像是先前章節裡的 QPushButton)。
這個類別只有一個成員,一個建構子(constructor)(再加上繼承自 QWidget 的成員)。這個建構子是一個標準的 Qt 元件建構子。當你建立元件時,你總是需要包含一個類似的建構子。
這個引數是它的父元件。為了建立一個最上層視窗,你將父元件指定為一個空指標。就像你所看到的,這個元件預設是作為一個最上層視窗。
MyWidget::MyWidget(QWidget *parent)
建構子的實現(implementation)從這裡開始。就像許多元件一樣,它只是把 parent 傳遞給 QWidget 的建構子。
: QWidget(parent) { setFixedSize(200, 120);
因為這個元件並不曉得如何處理改變大小(resize),所以我們固定(fix)了它的大小。在下一個章節,我們將展示一個元件是如何回應使用者的改變大小事件的。
QPushButton *quit = new QPushButton(tr("Quit"), this); quit->setGeometry(62, 40, 75, 30); quit->setFont(QFont("Times", 18, QFont::Bold));
這裡我們建立並設定了一個這個元件的子元件(這個新元件的父元件為 this,在這個例子中即為 MyWidget)。
tr() 的函式呼叫環繞(around)了 "Quit" 這個字面上的字串,用以標記這個字串是可以翻譯(translation)的,使它能夠在執行期(run-time)根據翻譯檔的內容作改變。在你決定以後要將你的應用程式翻譯為其他語言的情況下,使用 tr() 環繞所有使用者可見的字串是一個好習慣。
記得這個 quit 是這個建構子裡的一個局部(local)變數,MyWidget 無法追蹤到它。但是 Qt 可以、且將會自動地在 MyWidget 被刪除(delete)時刪除掉它。這就是為什麼 MyWidget 不需要解構子的原因。(另一方面,當你決定要刪除一個子元件時,也沒什麼壞處。這個子元件會自動告知 Qt 它即將死亡。)
QWidget::setGeometry() 設定了元件的螢幕位置以及大小。這等同於呼叫 QWidget::move() 之後緊接著呼叫 QWidget::resize()。
connect(quit, SIGNAL(clicked()), qApp, SLOT(quit())); }
qApp 指標是宣告在 <QApplication> 標頭檔裡的一個全域變數。它指向應用程式中的唯一一個 QApplication 實體(instance)。
int main(int argc, char *argv[]) { QApplication app(argc, argv); MyWidget widget; widget.show(); return app.exec(); }
這裡我們實體化我們的新子元件,顯示它、並且執行這支程式。
Running the Application
這支程式的行為相當類似前一個章節。不同的地方在於我們實現它的方式。無論如何,它的行為上還是會有點微小差異。試看看改變它的大小吧。
Exercises
試著在 main() 中建立另一個 MyWidget。發生什麼事?
試著加入更多按鈕,或是把 QPushButton 以外的東西放在元件裡。
來源:Qt Tutorial 4 - Let There Be Widgets
版本:4.4.3
1 回覆:
試著在 main() 中建立另一個 MyWidget
...開了兩個-_-b
張貼留言