快快樂樂學 QT - 第一章 Getting Started (1)

這一章是我們簡介 QT 的開始,我們將會由一個最經典的 "Hello QT" 的例子,先讓大家看看 QT 的程式會長什麼樣子。在此,也會介紹兩個 QT 的概念:"siganls and slots" 以及 layouts。

Hello Qt

那麼,先讓我們來看看 "Hello QT" 這個程式:
1  #include <qapplication.h>
2  #include <qlabel.h>

3  int main( int argc, char *argv[] )
4  {
5      QApplication app(argc, argv) ;
6      QLabel *label = new QLabel("Hello Qt!", 0) ;
7      app.setMainWidget(label) ;
8      label->show() ;
9      return app.exec() ;
10 }

第一、二行 include 了 QApplication 還有 QLabel 這兩個類別的 definitions,第五行建構了一個 QApplication 的物件來管理程式的資源,QApplication 的 constructor 需要 argc 以及 argv 當作參數。這是因為 QT 也支援了一些 command-line arguments。

第六行建構了顯示 "Hello Qt!" 的 QLabel widget,在 Qt 當中,一個 widget 指的就是一個 UI 上面的視覺元素。按鈕、選單、捲軸等等,都是 widget 的例子。Widget 當中也可以包含其他的 widgets,舉例來說,一個程式的視窗就是一個 widget,通常會包含 QMenuBarQToolBarQStatus,還有一些其他的 widget。後面傳給 QLabel constructor 的參數 0 (null pointer) 代表這個 widget 所在的視窗就是他自己,而不是一個在其他視窗當中的 widget。

第七行把 label 設定成程式的主要 widget,當使用者把主要 widget 關掉之後,程式就會結束。如果沒有設定主要 widget,程式會在關掉視窗之後依舊在背景一直執行。第八行讓 label 可以被看到,在 widgets 剛被建構的時候都是被設定為隱藏的,這樣我們可以在 widgets 被看到之前先對它們作設定。第九行把程式控制權傳給 Qt,在這個時候,程式進入到一種 stand-by 模式,等待使用者滑鼠、鍵盤等等的動作。

現在讓我們來測試一下程式吧!首先,我們需要先安裝 Qt3。我們假設你已經把 Qt3 裝好了,並且已經把 Qt 的 bin 目錄設定在你的 PATH 環境變數當中。

現在我們可以把這個程式取名叫做 hello.cpp,並且把他放在一個叫做 hello 的目錄當中。利用命令列,先切換你的目錄到 hello,打入
qmake -project
來創造一個跟平台無關的專案檔案 (hello.pro),接著再打入
qmake hello.pro
來從專案檔案當中創造一個平台相關的 makefile,執行 make 來 build 這個程式,接著執行 hello,就會看到程式的結果跑出來。

接著讓我們再來試試看一些東西,我們可以在 label 上面動一些手腳,透過插入一些簡單的 HTML-style 標籤格式,只要把這行
QLabel *label = new QLabel("Hello Qt!", 0) ;
改成
QLabel *label = new QLabel("<h2><i>Hello</i> ""<font color=red>Qt!</font></h2>", 0) ;
然後再 rebuilding 這個程式就可以看到新的結果。