.tutorials/tutorial/t2/t2.pro
在第一章我們已經建立了一個視窗,現在我們要讓這支程式在使用者使其退出(quit)時正確的退出。
我們也將使用一個比預設字體更有意思的字體。
#include <QApplication> #include <QFont> #include <QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton quit("Quit"); quit.resize(75, 30); quit.setFont(QFont("Times", 18, QFont::Bold)); QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit())); quit.show(); return app.exec(); }
Line by Line Walkthrough
#include <QFont>
由於這支程式使用了 QFont,所以它需要引入 <QFont>。
QPushButton quit("Quit");
這時,這個按鈕顯示 Quit,而且這正好就是使用者按下這個按鈕時,程式所需要做的。
quit.resize(75, 30);
因為這個按鈕的文字比 "Hello world!" 短一點,所以我們為它選擇了另一個大小。我們也可以使用 QFontMetrics 來設置正確的大小,或是讓 QPushButton 自己挑選合理的預設值。
quit.setFont(QFont("Times", 18, QFont::Bold));
這裡我們為這個按鈕選擇了一個新的字體,一個 Times 字型、18 字級的粗體字。你也可以使用 QApplication::setFont() 去改變整個應用程式的預設字體。
QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit()));
QObject::connect() 大概是 Qt 最主要的特色了。注意 connect() 是 QObject 中的一個靜態(static)函式。別把它跟 Berkeley socket 函式庫中的 connect() 搞混囉。
這個 connect() 在兩個 Qt 物件(直接或間接繼承自 QObject 的物件)中建立一條單向連接。每個 Qt 物件都擁有 signal (傳遞訊息)與 slots (接收訊息)。由於每個元件都繼承自 QWidget,而 QWidget 又繼承自 QObject,所以所有的元件都是一個 Qt 物件。
在這裡,quit 的 clicked() signal 被連接到 app 的 quit() slot,所以這個按鈕被按下時,就退出這支程式了。
Signals and Slots 這份文件詳細的描述了這個主題。
Running the Application
當你執行這支程式,你會看到一個比第一章更小的視窗,被一個更小的按鈕所填滿。
請看第一章瞭解如何建立一個 makefile 並建立這個應用程式。
Exercises
試著改變視窗的大小。按下按鈕去關閉這支程式。
在 QPushButton 中還有其他 signal 可以讓你連接到 quit 嗎?[提示:QPushButton 繼承了 QAbstractButton 的大部分功能。]
來源:Qt Tutorial 2 - Calling it Quits
版本:4.4.3
0 回覆:
張貼留言