Essential Qt 第一章 Hello Qt

      很多編程都是從HelloWorld開始第一個程序的,我們就從Hello Qt開始
#include<QApplication>
#include<QLabel>
int main(int argc , char** argv)
{
    QApplication app(argc,argv);
    QLabel* label = new QLabel("Hello Qt");
    label->show();
    return app.exec();
}


         這段代碼編譯後應該是這個樣子的
       
 
        第1-2行代碼包含了兩個頭文件,QLabel和QApplication,關於QLabel就是我們看到的標籤,在Qt中,絕大多數窗體都是一個類,Qt的命名習慣是字母Q+窗體種類名稱,而窗體的各種功能大多數通過類的成員函數來實現。這個程序中我們需要用到QLabel和QApplication這兩個類,所以用#include來包含,至於QApplication類的作用下述。
        第3行是C++的標準主函數
        第5行 生成了一個QApplication的對象app,這個程序中有關這個類的代碼一共有3行,先暫時跳過,我們最後再討論這個類
        第6-7行 生成了一個QLabel的對象label,Qt窗體在創建時默認是隱藏的,所以第7行調用QLabel的成員函數show()來顯示這個窗體,這樣你就可以看見他,此時你也許猜到了,他還有個成員函數hide(),作用是隱藏窗體,有興趣的朋友可以在第7行下面加上一句label->hide()來看看效果
第8行 是這個程序第三行的有關QApplication的代碼,在解釋這個類作用前,可能有人會問,這個程序代碼執行完了,爲什麼窗體還在這裏?事實上這個程序代碼並沒有執行完成,對象(第5行生成)app的成員函數exec()是個無限循環,這保證了這個程序代碼一直在執行,也就是這個標籤爲什麼一直在這裏的原因,當然直到你手動關閉掉這個標籤,無限循環結束。那麼這個類的作用就比較清晰了,使用他有3個步驟
1包含QApplication頭文件
2生成一個對象
3調用成員函數exec()使得窗體一直存在
         關於這個類的,在Essential Qt所有的例子中都只會用到這3行代碼,雖然死記硬背不提倡,但對於這樣公式化的東西背一下未嘗不是好版本,至於這個QApplication類的作用細節已經超出了範疇,用建議興趣的同學看完整個Essential Qt後再來探索

       好了,通過上面的解釋,我們可以把這段Hello Qt的代碼翻譯成“僞代碼”
包含QApplication頭文件
包含QLabel(標籤)頭文件 
int main(int argc , char** argv)
{
  生成一個QApplication對象
  生成一個QLabel(標籤)對象
  調用QLabel的show()函數使得標籤可見
  調用QApplication對象的exec()函數使得窗體一直結束(程序處於一直運行)
}

關於內存泄漏
         很多對內存敏感的朋友應該看出來這個程序存在的問題了,程序中使用new創建了一個對象(QLabel對象),但沒有對應的delete,關於這一點,在書本上(C++GUI Qt4編程)中的解釋是“這樣一點內存泄漏無關大局”,事實上,對於很多C/C++程序員來說,任何內存泄漏都是無法容忍的,有人會問,Qt是否不考慮內存泄漏的問題?
        答案是否定的,Qt自帶了一套非常不錯的內存管理機制,這使得Qt對於內存的管理相對於一般的C++內存管理有很大不同,Qt更加的智能,更加的自動化,關於Qt如何管理內存,我們將在稍後的篇章裏詳細討論這個問題,因爲討論Qt內存的問題需要一些稍後介紹的內容,出於排版上的考慮,放在了稍後幾章,在正式討論這個問題之前,先讓我們“放肆“一下,暫時忽略內存泄漏的問題。當然,我這裏想你鄭重的承諾,Essential Qt裏的例子絕對不會導致你電腦宕機
發佈了92 篇原創文章 · 獲贊 19 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章