本書著重于講解利用Qt開發(fā)圖形界面的基礎(chǔ)知識。主要包括集成開發(fā)環(huán)境Qt Creator的使用、基本控件、菜單和工具欄、對話框、界面布局、事件系統(tǒng)、二維繪圖、樣式表的使用等;靖采w了在Qt開發(fā)平臺下開發(fā)桌面窗口界面的知識, 講述簡單實用、步驟詳盡, 非常適合于課堂講解少而練習(xí)時間多的授課方式, 適合于在翻轉(zhuǎn)式教學(xué)模式下引導(dǎo)學(xué)生自我學(xué)習(xí)。也十分易于一般讀者自學(xué)。
Qt圖形界面編程經(jīng)典入門教材,面向基礎(chǔ),注重實踐,簡單實用、步驟詳盡,適合少學(xué)時和翻轉(zhuǎn)課堂教學(xué)模式下引導(dǎo)學(xué)生自我學(xué)習(xí),被多所高校用作教材。
Qt是基于C++語言的著名的跨平臺開發(fā)框架,自20世紀(jì)90年代出現(xiàn)以后,不斷發(fā)展壯大,現(xiàn)在已經(jīng)發(fā)展成為強大的、幾乎全功能的開發(fā)框架。它不僅可以用于開發(fā)用戶界面,還可以進行數(shù)據(jù)庫、網(wǎng)絡(luò)、多媒體、嵌入式等方面的編程開發(fā),但是Qt最側(cè)重的,歷史最悠久的仍然是GUI圖形界面開發(fā)。Qt開發(fā)的程序可以運行于Windows、Linux、UNIX等主流操作系統(tǒng),只要沒有調(diào)用專屬于某個操作系統(tǒng)的功能,Qt開發(fā)的源程序一般不用修改,只需將它的源碼在不同的操作系統(tǒng)下編譯后即可執(zhí)行,真正達到了“一次編寫,處處編譯”的境界。
全書共分10章。
第1章和第2章講述C++語言面向?qū)ο蟮幕A(chǔ)知識。因為本書假定讀者了解C語言的編程基礎(chǔ),所以這里用兩章的篇幅介紹面向?qū)ο蟮闹R,包括類和對象、類的繼承和多態(tài)等方面的知識。
第3章介紹Qt的安裝、Qt Creator的基本使用、信號與槽通信機制,以及編程中常用的幾個基本字符串類。
第4章講解基礎(chǔ)窗口類以及各種常用的界面控件,包括按鈕、標(biāo)簽、單選按鈕、檢查框、組合框、列表框、編輯框、進度條、選項卡、樹狀控件、表格控件、富文本控件等。這些控件可以方便地構(gòu)造圖形界面。
第5章講解菜單、工具欄和狀態(tài)欄的基礎(chǔ)知識,以及對話框的基礎(chǔ)知識。了解手工編程和利用設(shè)計器構(gòu)建菜單的差異,了解模態(tài)、非模態(tài)對話框的不同之處。
第6章介紹控件布局管理、窗口切分與?、單文檔與多文檔界面的實現(xiàn)方式。有了布局管理的知識,就可以靈活高效地安排控件的位置并使之隨界面大小而動態(tài)變化。大大簡化了界面編程的強度。
第7章介紹事件系統(tǒng)的基本知識。窗體程序的一舉一動全由事件驅(qū)動,鼠標(biāo)操作、鍵盤操作、定時發(fā)生的動作、界面重繪等全是事件,有了事件概念并且適當(dāng)?shù)乩檬录幚頇C制編寫程序是界面編程的要點之一。
第8章講解二維繪圖系統(tǒng)。畫筆、畫刷的利用和圖形繪制是界面編程中不可或缺的內(nèi)容,坐標(biāo)變換和特殊填充方式體現(xiàn)了Qt二維繪圖功能的強大。
第9章介紹利用樣式表美化界面的方法。在Qt中利用類似于網(wǎng)頁CSS腳本的QSS腳本可以直接設(shè)定各種控件的大小、顏色、背景等屬性,極大地方便了界面的美化。
第10章給出3個編程實例——接金幣、俄羅斯方塊、游戲大廳界面。通過這些范例讓讀者進一步了解界面編程所需要的綜合能力。
由于本書內(nèi)容廣泛,加上編寫時間倉促,以及作者水平有限,書中可能有錯誤及不合理之處,懇請讀者指正。
仇國巍
2017年1月
第3章初識Qt開發(fā)框架
3.1Qt的歷史淵源 Qt是1991年由挪威的奇趣科技(Trolltech)公司開發(fā)的跨平臺C++圖形用戶界面(GUI)應(yīng)用程序開發(fā)框架。2008年,奇趣科技公司被諾基亞公司收購,Qt也因此成為諾基亞公司旗下的編程語言工具,曾稱霸一時的Symbian手機操作系統(tǒng)就是基于Qt開發(fā)的。2012年,Qt被芬蘭軟件公司Digia收購。 Qt最早在Linux系統(tǒng)上大放異彩,它是Linux著名的桌面系統(tǒng)KDE的開發(fā)平臺。后來又被很多軟件公司用來開發(fā)重量級產(chǎn)品,其中包括三維動畫軟件Maya、辦公套件WPS、即時通信軟件Skype等。它既可以開發(fā)GUI程序,也可用于開發(fā)非GUI程序。 目前Qt在不同的行業(yè)中都取得了不小的成績,例如能源、醫(yī)療、軍工和國防、汽車、游戲動畫和視覺效果、芯片、消費電子、工業(yè)自動化、計算機輔助設(shè)計和制造等。以華為公司、中石油公司為代表的客戶已經(jīng)說明了Qt實力的雄厚。 歷經(jīng)二十多年不斷發(fā)展進步,Qt已經(jīng)發(fā)展成為一個完善的C++開發(fā)框架,可以開發(fā)出強大的、互動的并且獨立于平臺的應(yīng)用程序。Qt的應(yīng)用程序可以在本地桌面、嵌入式和移動主機系統(tǒng)上運行,其具有的性能遠(yuǎn)遠(yuǎn)優(yōu)于其他跨平臺的應(yīng)用程序開發(fā)框架。 Qt具有下列突出優(yōu)點: 優(yōu)良的跨平臺特性。
Qt支持的操作系統(tǒng)包括Microsoft Windows、Apple Mac OS X、Linux/X11,Embedded Linux、Windows Embedded、RTOS以及手機上的Android、IOS等。 面向?qū)ο。Qt的良好封裝機制使得Qt的模塊化程度非常高,可重用性較好,對于用戶開發(fā)來說是非常方便的。Qt提供了一種稱為signal/slot(信號/槽)的通信機制,這使得各個元件之間的協(xié)同工作變得更為簡單和安全。 豐富的 API。Qt包括多達 250 個以上的C++類,除了用于用戶界面開發(fā),還可用于文件操作、數(shù)據(jù)庫處理、網(wǎng)絡(luò)通信、2D/3D圖形渲染、XML操作等。
3.2安裝Qt開發(fā)系統(tǒng)〖*4/5〗
3.2.1Qt系統(tǒng)下載Qt系統(tǒng)可以在官方下載網(wǎng)站http://download.qt.io/archive或者中文的Qtcn開發(fā)網(wǎng)http://www.qtcn.org上下載。 本書采用的是qt.opensource.windows.x86.mingw482_opengl.5.3.2.exe軟件包,也就是Qt 5.3.2版本,其官方下載界面如圖3.1所示。由于在Qt發(fā)展過程中,其結(jié)構(gòu)有時會有較大變動,因此在本書學(xué)習(xí)過程中,請盡量選用Qt 5.3或更新的版本。 圖3.1Qt系統(tǒng)官方下載界面 Qt本質(zhì)上是一套C++類庫,用于編寫C++源程序。Qt本身沒有C++的編譯系統(tǒng),而是采用開源的MinGW(基于gcc、gdb)或者微軟公司的msvc編譯系統(tǒng)。本書采用整合MinGW的軟件包,該軟件包無須微軟公司的VC 2012或VC 2013開發(fā)環(huán)境的支持。圖3.2在Qt安裝界面上選擇組件 在安裝過程中有一步是選擇組件,這時一定要將Tools中的MinGW 4.8.2選中,如圖3.2所示。另外,在選擇軟件授權(quán)協(xié)議的界面,選擇LGPL協(xié)議(GNU寬通用公共許可證)即可。其他步驟可按默認(rèn)方式操作。安裝完成后,Qt類庫、集成開發(fā)環(huán)境Qt Creator、官方例程以及MinGW系統(tǒng)就一并安裝好了。
3.2.2Qt Creator簡介 除了可以用手工方式編寫基于Qt的程序代碼,也可以使用官方開發(fā)的集成開發(fā)環(huán)境Qt Creator。Qt Creator提供了圖形化的界面設(shè)計器Qt Designer,該工具提供了Qt基本的窗體部件,如QWidget(基本窗口)、QLabel(標(biāo)簽)、QPushButton(按鈕)等,可以在設(shè)計器中通過鼠標(biāo)直接拖曳這些窗口部件并將其布置到窗口界面中,從而實現(xiàn)所見即所得的設(shè)計。 Qt Creator啟動界面如圖3.3所示。它的中間部分是主窗口,上部是菜單欄,左側(cè)工具欄主要是模式選擇器和一些常用按鈕。 圖3.3Qt Creator啟動界面
1. 菜單欄(Menu Bar) 菜單欄包括以下8個菜單。 “文件”菜單: 包含新建、打開、關(guān)閉項目和文件,打印文件和退出等基本功能。 “編輯”菜單: 包含撤銷、剪切、復(fù)制、查找等常用功能,在高級菜單中還有標(biāo)示空白符、折疊代碼、改變字體大小等功能。 “構(gòu)建”菜單: 包含構(gòu)建和運行項目等相關(guān)的功能。 “調(diào)試”菜單: 包含調(diào)試程序等相關(guān)的功能。 “分析”菜單: 包含QML分析器、Valgrind內(nèi)存分析器等功能菜單。QML是Qt開發(fā)團隊創(chuàng)立的一種腳本語言,可以通過描述的方式創(chuàng)建窗體程序。QML分析器可以分析一段腳本執(zhí)行過程中出現(xiàn)的問題。而Valgrind是一個免費的工具包,用來檢測程序運行時內(nèi)存泄露、越界等問題。 “工具”菜單: 提供了快速定位菜單、版本控制工具菜單和界面編輯器菜單等。其中的“選項”菜單中包含Qt Creator各個方面的設(shè)置選項,包括環(huán)境設(shè)置、快捷鍵設(shè)置、編輯器設(shè)置、幫助設(shè)置、Qt版本設(shè)置、Qt設(shè)計師設(shè)置和版本控制設(shè)置等。 “控件”菜單: 包含設(shè)置窗口布局的一些菜單項,如全屏顯示和隱藏邊欄等。 “幫助”菜單: 包含Qt幫助、Qt Creator版本信息和插件管理等菜單項。
2. 模式選擇器( Mode Selector ) Qt Creator包含歡迎、編輯、設(shè)計、調(diào)試(Debug)、項目、分析和幫助6個模式,各個模式完成不同的功能。也可以使用快捷鍵來更換模式,對應(yīng)的快捷鍵依次是Ctrl+1~6。下面簡單介紹主要的幾種模式。 編輯模式: 主要用來查看和編輯程序代碼,管理項目文件。Qt Creator的編輯器具有關(guān)鍵字特殊顏色顯示、代碼自動補全、聲明定義間快捷切換、函數(shù)原型提示、Fl鍵快速打開相關(guān)幫助和在項目中進行查找等功能。 設(shè)計模式: 整合了Qt設(shè)計師的功能?梢栽谶@里設(shè)計圖形界面,進行部件屬性設(shè)置、信號和槽設(shè)置、布局設(shè)置等操作。 調(diào)試模式: Qt Creator默認(rèn)使用gdb進行調(diào)試,支持設(shè)置斷點、單步調(diào)試和遠(yuǎn)程調(diào)試等功能,包含局部變量、監(jiān)視器、斷點、線程以及快照等查看窗口。 項目模式: 包含對特定項目的構(gòu)建設(shè)置、運行設(shè)置、編輯器設(shè)置和依賴關(guān)系等頁面。構(gòu)建設(shè)置中可以對項目的版本、使用Qt的版本和編譯步驟進行設(shè)置;編輯器設(shè)置中可以設(shè)置文件的默認(rèn)編碼。
3. 常用按鈕 Qt Creator啟動界面左下角包含目標(biāo)選擇器、運行按鈕、調(diào)試按鈕和構(gòu)建全部項目4個按鈕圖標(biāo)。目標(biāo)選擇器用來選擇要構(gòu)建哪個平臺的項目,這對于多個Qt庫的項目很有用。還可以選擇編譯項目的debug版本或release版本。運行按鈕可以實現(xiàn)項目的構(gòu)建和運行。調(diào)試按鈕可以進入調(diào)試模式。構(gòu)建全部項目按鈕可以構(gòu)建所有打開的項目。
3.3創(chuàng)建一個簡單程序 本節(jié)以手工編碼和圖形化操作方式建立兩個同樣的“Hello Qt!”程序。 注意: 在建立項目時,項目的路徑和名稱都不要使用中文。
3.3.1手工編碼方式 【例3.1】利用手工編碼方式建立“Hello Qt!”程序。 第1步,利用Qt Creator的菜單“文件→新建文件或項目”打開新建對話框,選擇“其他項目→空的Qt項目”建立一個名為3_1的工程。這時工程中除了名為3_1.pro工程文件外無任何其他文件。 第2步,再次打開新建對話框,選擇C++項目下的C++ Source File,添加一個C++源程序q1.cpp(名稱可以任。。 第3步,單擊打開工程文件3_1.pro,在末尾行添加文字: QT +=widgets。這樣便可以在工程中使用可視化的部件。 第4步,在源程序q1.cpp中添加如下代碼: 1#include 2#include 3#include 4int main(int argc, char argv\[\]) 5{ 6QApplication a(argc,argv); 7QDialog w; 8QLabel label(&w); 9label.setText("Hello Qt!"); 10label.setGeometry(10,10,100,100); 11w.show(); 12return a.exec(); 13}圖3.4工程3_1運行界面 至此,一個完整的Qt程序就完成了。
單擊運行按鈕(圖標(biāo)為,對應(yīng)快捷方式為Ctrl+R鍵),即可得到圖3.4所示的窗體。 代碼說明: 第1~3行包含了頭文件。其中2、3兩行說明可使用對話框類和標(biāo)簽類。 第4行是C++中的main函數(shù),它有兩個參數(shù),用來接收命令行參數(shù)。 第6行新建QApplication類對象,用于管理應(yīng)用程序的各種設(shè)置,并執(zhí)行事件處理工作,任何一個Qt GUI程序都要有一個QApplication對象。該對象需要argc和argv兩個參數(shù)。 第7行新建一個QDialog對象,實現(xiàn)一個對話框界面。 第8行新建了標(biāo)簽QLabel對象,并將QDialog對象w作為參數(shù),表明對話框w是它的父窗口,也就是說這個標(biāo)簽放在對話框窗口中。 第9行給標(biāo)簽設(shè)置要顯示的字符。 第10行設(shè)置標(biāo)簽相對于對話框的位置和大小,使用了函數(shù)void setGeometry(int x,int y,int w,int h),其中x、y設(shè)置標(biāo)簽在對話框中的坐標(biāo),w為寬,h為高。GUI控件都有這個函數(shù)。 第11行將對話框顯示出來。在默認(rèn)情況下,窗口部件對象是不可見的,要使用show函數(shù)讓它們顯示出來。 第12行的exec函數(shù)讓QApplication對象進入事件循環(huán),這樣Qt應(yīng)用程序在運行時便可以接收產(chǎn)生的事件,例如鼠標(biāo)單擊和鍵盤按下等事件。
3.3.2無UI的向?qū)Х绞?所謂UI是指程序界面描述文件,可用于可視化界面設(shè)計。 【例3.2】利用無UI的應(yīng)用程序向?qū)Ыⅰ癏ello Qt!”程序。 第1步,建立無UI的工程。 ……