Qt學習之路(3):Hello, world!(續)

下面來逐行解釋一下前面的那個Hello, world!程序,儘管很簡單,但卻能夠對Qt程序的結構有一個清楚的認識。如今再把代碼貼過來:
 
#include <QApplication>
#include <QLabel>

int main( int argc, char *argv[])
{
        QApplication app(argc, argv);
        QLabel *label = new QLabel( "Hello, world!");
        label->show();
         return app.exec();
}
 
第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的建立一句改爲
 
QLabel *label = new QLabel( "<h2><font color='red'>Hello</font>, world!<h2>");
 
運行一下:
 
 
同Swing的JLabel同樣,Qt也是支持HTML解析的。
 
好了,這個Hello, world就說到這裏!明確一下Qt的程序結構,在一個Qt源代碼中,一下兩條語句是必不可少的:
QApplication app(argc, argv);
//...
return app.exec();
相關文章
相關標籤/搜索