程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> Qt學習之路(3):Hello,world!(續)

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

編輯:關於C++

下面來逐行解釋一下前面的那個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();

出處: http://devbean.blog.51cto.com/448512/194137

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved