下面來逐行解釋一下前面的那個Hello, world!程序,儘管很簡單,但卻能夠對Qt程序的結構有一個清楚的認識。如今再把代碼貼過來:
![](http://static.javashuo.com/static/loading.gif)
#include <QApplication>
![](http://static.javashuo.com/static/loading.gif)
#include <QLabel>
int main(
int argc,
char *argv[])
![](http://static.javashuo.com/static/loading.gif)
{
![](http://static.javashuo.com/static/loading.gif)
QApplication app(argc, argv);
![](http://static.javashuo.com/static/loading.gif)
QLabel *label =
new QLabel(
"Hello, world!");
![](http://static.javashuo.com/static/loading.gif)
label->show();
return app.exec();
![](http://static.javashuo.com/static/loading.gif)
}
第1行和第2行就是須要引入的頭文件。和普通的C++程序沒有什麼兩樣,若是要使用某個組件,就必需要引入相應的頭文件,這相似於Java的import機制。值得說明的是,Qt中頭文件和類名是一致的。也就是說,若是你要使用某個類的話,它的類名就是它的頭文件名。
第3行是空行 :)
第4行是main函數函數頭。這與普通的C++程序沒有什麼兩樣,學過C++的都明白。所以你能夠看到,實際上,Qt徹底經過普通的main函數進入,這不一樣於wxWidgets,由於wxWidgets的Hello, world須要你繼承它的一個wxApp類,並覆蓋它的wxApp::OnInit方法,系統會自動將OnInit編譯成入口函數。不過在Qt中,就不須要這些了。
第5行,噢噢,大括號…
第6行,建立一個QApplication對象。這個對象用於管理應用程序級別的資源。QApplication的構造函數要求兩個參數,分別來自main的那兩個參數,所以,Qt在必定程度上是支持命令行參數的。
第7行,建立一個QLabel對象,而且可以顯示Hello, world!字符串。和其餘庫的Label控件同樣,這是用來顯示文本的。在Qt中,這被稱爲一個widget(翻譯出來是小東西,不過這個翻譯並很差…),它等同於Windows技術裏面的控件(controls)和容器(containers)。也就是說,widget能夠放置其餘的widget,就像Swing的組件。大多數Qt程序使用QMainWindow或者QDialog做爲頂級組件,但Qt並不強制要求這點。在這個例子中,頂級組件就是一個QLabel。
第8行,使這個label可見。組件建立出來以後一般是不可見的,要求咱們手動的使它們可見。這樣,在建立出組建以後咱們就能夠對它們進行各類定製,以免出現以後在屏幕上面會有閃爍。
第9行,將應用程序的控制權移交給Qt。這時,程序的事件循環就開始了,也就是說,這時能夠相應你發出的各類事件了。這相似於gtk+最後的一行gtk_main()。
第10行,大括號……程序結束了。
注意,咱們並無使用delete去刪除建立的QLabel,由於在程序結束後操做系統會回收這個空間——這只是由於這個QLabel佔用的內存比較小,但有時候這麼作會引發麻煩的,特別是在大程序中,所以必須當心。
好了,程序解釋完了。按照正常的流程,下面應該編譯。前面也提過,Qt的編譯不能使用普通的make,而必須先使用qmake進行預編譯。因此,第一步應該是在工程目錄下使用
qmake -project
命令建立.pro文件(好比說是叫helloworld.pro)。而後再在.pro文件目錄下使用
qmake helloworld.pro (make)
或者
qmake -tp vc helloworld.pro (nmake)
生成makefile,而後才能調用make或者是nmake進行編譯。不過由於咱們使用的是IDE,因此這些步驟就不須要咱們手動完成了。
值得說明一點的是,這個qmake可以生成標準的makefile文件,所以徹底能夠利用qmake自動生成makefile——這是題外話。
好了,下面修改一下源代碼,把QLabel的建立一句改爲
![](http://static.javashuo.com/static/loading.gif)
QLabel *label =
new QLabel(
"<h2><font color='red'>Hello</font>, world!<h2>");
運行一下:
同Swing的JLabel同樣,Qt也是支持HTML解析的。
好了,這個Hello, world就說到這裏!明確一下Qt的程序結構,在一個Qt源代碼中,一下兩條語句是必不可少的:
![](http://static.javashuo.com/static/loading.gif)
QApplication app(argc, argv);
//...
return app.exec();