本書著重于講解利用Qt開發(fā)圖形界面的基礎知識。主要包括集成開發(fā)環(huán)境Qt Creator的使用、基本控件、菜單和工具欄、對話框、界面布局、事件系統(tǒng)、二維繪圖、樣式表的使用等。基本覆蓋了在Qt開發(fā)平臺下開發(fā)桌面窗口界面的知識, 講述簡單實用、步驟詳盡, 非常適合于課堂講解少而練習時間多的授課方式, 適合于在翻轉(zhuǎn)式教學模式下引導學生自我學習。也十分易于一般讀者自學。
Qt圖形界面編程經(jīng)典入門教材,面向基礎,注重實踐,簡單實用、步驟詳盡,適合少學時和翻轉(zhuǎn)課堂教學模式下引導學生自我學習,被多所高校用作教材。
Qt是基于C++語言的著名的跨平臺開發(fā)框架,自20世紀90年代出現(xiàn)以后,不斷發(fā)展壯大,現(xiàn)在已經(jīng)發(fā)展成為強大的、幾乎全功能的開發(fā)框架。它不僅可以用于開發(fā)用戶界面,還可以進行數(shù)據(jù)庫、網(wǎng)絡、多媒體、嵌入式等方面的編程開發(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知識。因為本書假定讀者了解C語言的編程基礎,所以這里用兩章的篇幅介紹面向?qū)ο蟮闹R,包括類和對象、類的繼承和多態(tài)等方面的知識。
第3章介紹Qt的安裝、Qt Creator的基本使用、信號與槽通信機制,以及編程中常用的幾個基本字符串類。
第4章講解基礎窗口類以及各種常用的界面控件,包括按鈕、標簽、單選按鈕、檢查框、組合框、列表框、編輯框、進度條、選項卡、樹狀控件、表格控件、富文本控件等。這些控件可以方便地構(gòu)造圖形界面。
第5章講解菜單、工具欄和狀態(tài)欄的基礎知識,以及對話框的基礎知識。了解手工編程和利用設計器構(gòu)建菜單的差異,了解模態(tài)、非模態(tài)對話框的不同之處。
第6章介紹控件布局管理、窗口切分與?俊挝臋n與多文檔界面的實現(xiàn)方式。有了布局管理的知識,就可以靈活高效地安排控件的位置并使之隨界面大小而動態(tài)變化。大大簡化了界面編程的強度。
第7章介紹事件系統(tǒng)的基本知識。窗體程序的一舉一動全由事件驅(qū)動,鼠標操作、鍵盤操作、定時發(fā)生的動作、界面重繪等全是事件,有了事件概念并且適當?shù)乩檬录幚頇C制編寫程序是界面編程的要點之一。
第8章講解二維繪圖系統(tǒng)。畫筆、畫刷的利用和圖形繪制是界面編程中不可或缺的內(nèi)容,坐標變換和特殊填充方式體現(xiàn)了Qt二維繪圖功能的強大。
第9章介紹利用樣式表美化界面的方法。在Qt中利用類似于網(wǎng)頁CSS腳本的QSS腳本可以直接設定各種控件的大小、顏色、背景等屬性,極大地方便了界面的美化。
第10章給出3個編程實例——接金幣、俄羅斯方塊、游戲大廳界面。通過這些范例讓讀者進一步了解界面編程所需要的綜合能力。
由于本書內(nèi)容廣泛,加上編寫時間倉促,以及作者水平有限,書中可能有錯誤及不合理之處,懇請讀者指正。
仇國巍
2017年1月
第3章初識Qt開發(fā)框架
3.1Qt的歷史淵源 Qt是1991年由挪威的奇趣科技(Trolltech)公司開發(fā)的跨平臺C++圖形用戶界面(GUI)應用程序開發(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è)自動化、計算機輔助設計和制造等。以華為公司、中石油公司為代表的客戶已經(jīng)說明了Qt實力的雄厚。 歷經(jīng)二十多年不斷發(fā)展進步,Qt已經(jīng)發(fā)展成為一個完善的C++開發(fā)框架,可以開發(fā)出強大的、互動的并且獨立于平臺的應用程序。Qt的應用程序可以在本地桌面、嵌入式和移動主機系統(tǒng)上運行,其具有的性能遠遠優(yōu)于其他跨平臺的應用程序開發(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)絡通信、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)有時會有較大變動,因此在本書學習過程中,請盡量選用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寬通用公共許可證)即可。其他步驟可按默認方式操作。安裝完成后,Qt類庫、集成開發(fā)環(huán)境Qt Creator、官方例程以及MinGW系統(tǒng)就一并安裝好了。
3.2.2Qt Creator簡介 除了可以用手工方式編寫基于Qt的程序代碼,也可以使用官方開發(fā)的集成開發(fā)環(huán)境Qt Creator。Qt Creator提供了圖形化的界面設計器Qt Designer,該工具提供了Qt基本的窗體部件,如QWidget(基本窗口)、QLabel(標簽)、QPushButton(按鈕)等,可以在設計器中通過鼠標直接拖曳這些窗口部件并將其布置到窗口界面中,從而實現(xiàn)所見即所得的設計。 Qt Creator啟動界面如圖3.3所示。它的中間部分是主窗口,上部是菜單欄,左側(cè)工具欄主要是模式選擇器和一些常用按鈕。 圖3.3Qt Creator啟動界面
1. 菜單欄(Menu Bar) 菜單欄包括以下8個菜單。 “文件”菜單: 包含新建、打開、關閉項目和文件,打印文件和退出等基本功能。 “編輯”菜單: 包含撤銷、剪切、復制、查找等常用功能,在高級菜單中還有標示空白符、折疊代碼、改變字體大小等功能。 “構(gòu)建”菜單: 包含構(gòu)建和運行項目等相關的功能。 “調(diào)試”菜單: 包含調(diào)試程序等相關的功能。 “分析”菜單: 包含QML分析器、Valgrind內(nèi)存分析器等功能菜單。QML是Qt開發(fā)團隊創(chuàng)立的一種腳本語言,可以通過描述的方式創(chuàng)建窗體程序。QML分析器可以分析一段腳本執(zhí)行過程中出現(xiàn)的問題。而Valgrind是一個免費的工具包,用來檢測程序運行時內(nèi)存泄露、越界等問題。 “工具”菜單: 提供了快速定位菜單、版本控制工具菜單和界面編輯器菜單等。其中的“選項”菜單中包含Qt Creator各個方面的設置選項,包括環(huán)境設置、快捷鍵設置、編輯器設置、幫助設置、Qt版本設置、Qt設計師設置和版本控制設置等。 “控件”菜單: 包含設置窗口布局的一些菜單項,如全屏顯示和隱藏邊欄等。 “幫助”菜單: 包含Qt幫助、Qt Creator版本信息和插件管理等菜單項。
2. 模式選擇器( Mode Selector ) Qt Creator包含歡迎、編輯、設計、調(diào)試(Debug)、項目、分析和幫助6個模式,各個模式完成不同的功能。也可以使用快捷鍵來更換模式,對應的快捷鍵依次是Ctrl+1~6。下面簡單介紹主要的幾種模式。 編輯模式: 主要用來查看和編輯程序代碼,管理項目文件。Qt Creator的編輯器具有關鍵字特殊顏色顯示、代碼自動補全、聲明定義間快捷切換、函數(shù)原型提示、Fl鍵快速打開相關幫助和在項目中進行查找等功能。 設計模式: 整合了Qt設計師的功能。可以在這里設計圖形界面,進行部件屬性設置、信號和槽設置、布局設置等操作。 調(diào)試模式: Qt Creator默認使用gdb進行調(diào)試,支持設置斷點、單步調(diào)試和遠程調(diào)試等功能,包含局部變量、監(jiān)視器、斷點、線程以及快照等查看窗口。 項目模式: 包含對特定項目的構(gòu)建設置、運行設置、編輯器設置和依賴關系等頁面。構(gòu)建設置中可以對項目的版本、使用Qt的版本和編譯步驟進行設置;編輯器設置中可以設置文件的默認編碼。
3. 常用按鈕 Qt Creator啟動界面左下角包含目標選擇器、運行按鈕、調(diào)試按鈕和構(gòu)建全部項目4個按鈕圖標。目標選擇器用來選擇要構(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程序就完成了。
單擊運行按鈕(圖標為,對應快捷方式為Ctrl+R鍵),即可得到圖3.4所示的窗體。 代碼說明: 第1~3行包含了頭文件。其中2、3兩行說明可使用對話框類和標簽類。 第4行是C++中的main函數(shù),它有兩個參數(shù),用來接收命令行參數(shù)。 第6行新建QApplication類對象,用于管理應用程序的各種設置,并執(zhí)行事件處理工作,任何一個Qt GUI程序都要有一個QApplication對象。該對象需要argc和argv兩個參數(shù)。 第7行新建一個QDialog對象,實現(xiàn)一個對話框界面。 第8行新建了標簽QLabel對象,并將QDialog對象w作為參數(shù),表明對話框w是它的父窗口,也就是說這個標簽放在對話框窗口中。 第9行給標簽設置要顯示的字符。 第10行設置標簽相對于對話框的位置和大小,使用了函數(shù)void setGeometry(int x,int y,int w,int h),其中x、y設置標簽在對話框中的坐標,w為寬,h為高。GUI控件都有這個函數(shù)。 第11行將對話框顯示出來。在默認情況下,窗口部件對象是不可見的,要使用show函數(shù)讓它們顯示出來。 第12行的exec函數(shù)讓QApplication對象進入事件循環(huán),這樣Qt應用程序在運行時便可以接收產(chǎn)生的事件,例如鼠標單擊和鍵盤按下等事件。
3.3.2無UI的向?qū)Х绞?所謂UI是指程序界面描述文件,可用于可視化界面設計。 【例3.2】利用無UI的應用程序向?qū)Ыⅰ癏ello Qt!”程序。 第1步,建立無UI的工程。 ……