2月 04, 2009

【翻譯】Qt Tutorial 2 - Calling it Quits

@
tutorials/tutorial/t2/main.cpp
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 物件。

  在這裡,quitclicked() signal 被連接到 appquit() slot,所以這個按鈕被按下時,就退出這支程式了。

  Signals and Slots 這份文件詳細的描述了這個主題。


Running the Application

  當你執行這支程式,你會看到一個比第一章更小的視窗,被一個更小的按鈕所填滿。

  請看第一章瞭解如何建立一個 makefile 並建立這個應用程式。


Exercises

  試著改變視窗的大小。按下按鈕去關閉這支程式。

  在 QPushButton 中還有其他 signal 可以讓你連接到 quit 嗎?[提示:QPushButton 繼承了 QAbstractButton 的大部分功能。]


來源:Qt Tutorial 2 - Calling it Quits
版本:4.4.3

0 回覆:

張貼留言