




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、12022年6月12日第14章Qt圖形界面程序設(shè)計(jì)22022年6月12日主要內(nèi)容主要內(nèi)容 Qt的作用的作用 Qt簡(jiǎn)介簡(jiǎn)介 基本基本Qt程序示例程序示例 項(xiàng)目文件項(xiàng)目文件 利用利用qmake編譯程序編譯程序 應(yīng)用消息應(yīng)用消息/槽的槽的Qt程序示例程序示例 程序結(jié)構(gòu)程序結(jié)構(gòu) 界面布局界面布局 程序編譯程序編譯32022年6月12日Qt的作用的作用網(wǎng)絡(luò)協(xié)議網(wǎng)絡(luò)協(xié)議X客戶端(應(yīng)用程序)客戶端(應(yīng)用程序)X工具包、工具包、Gtk+,QtXLibX客戶端(應(yīng)用程序)客戶端(應(yīng)用程序)X工具包、工具包、Gtk+,QtXLibX服務(wù)器服務(wù)器設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序 Qt工具包在工具包在XWindow中的作用中
2、的作用 和和Gtk+一樣,是一樣,是Xlib之上更高層的開發(fā)工具包,它們將底層之上更高層的開發(fā)工具包,它們將底層的的Xlib的的API進(jìn)行封裝,提供更高級(jí)的接口,達(dá)到降低開發(fā)難進(jìn)行封裝,提供更高級(jí)的接口,達(dá)到降低開發(fā)難度,提高開發(fā)效率的目的。度,提高開發(fā)效率的目的。 42022年6月12日Qt簡(jiǎn)介簡(jiǎn)介 良好的可移植性:良好的可移植性: X11:即運(yùn)行在:即運(yùn)行在X Window的系統(tǒng),包括的系統(tǒng),包括linux、unix等;等; windows系統(tǒng):包括系統(tǒng):包括windows95/98/Nt/2000/Xp/2003等;等; Macintosh系統(tǒng):系統(tǒng):Max OS X; 嵌入式系統(tǒng);嵌入
3、式系統(tǒng); 輔助工具輔助工具 Qmake:簡(jiǎn)化編譯過程:簡(jiǎn)化編譯過程 QtAssist:定位幫助信息:定位幫助信息 QtDesigner:輔助界面設(shè)計(jì):輔助界面設(shè)計(jì)52022年6月12日Qt簡(jiǎn)介簡(jiǎn)介 Qt的維護(hù)與許可制度的維護(hù)與許可制度 不是由軟件組織和基金會(huì)維護(hù);不是由軟件組織和基金會(huì)維護(hù); 由由Nokia(Trolltech)國(guó)際化的公司維護(hù);)國(guó)際化的公司維護(hù); General Public License(GPL)、)、LGPL版本版本 ; 雙許可證(雙許可證(Dual Licensing)的版本)的版本 商業(yè)軟件商業(yè)軟件 非商業(yè)軟件非商業(yè)軟件62022年6月12日Qt簡(jiǎn)介簡(jiǎn)介 界面元素
4、的組織:界面元素的組織: 以類繼承的結(jié)構(gòu)組織;以類繼承的結(jié)構(gòu)組織; 基類:基類:QWidget; 事件與事件處理程序的關(guān)聯(lián):事件與事件處理程序的關(guān)聯(lián): 重載已有的事件處理程序;重載已有的事件處理程序; 適合于已經(jīng)存在的事件處理函數(shù)適合于已經(jīng)存在的事件處理函數(shù) 利用信號(hào)利用信號(hào)/槽的機(jī)制關(guān)聯(lián)信號(hào)(事件)和信號(hào)對(duì)應(yīng)的槽的機(jī)制關(guān)聯(lián)信號(hào)(事件)和信號(hào)對(duì)應(yīng)的事件。事件。 信號(hào)(信號(hào)(signal)是對(duì)象(類)向外界發(fā)送的任意)是對(duì)象(類)向外界發(fā)送的任意消息、事件,不僅僅是界面元素產(chǎn)生的一般消息消息、事件,不僅僅是界面元素產(chǎn)生的一般消息(鼠標(biāo)、鍵盤等)。(鼠標(biāo)、鍵盤等)。 槽(槽(slot)是可以接收消
5、息的特殊函數(shù)。)是可以接收消息的特殊函數(shù)。 72022年6月12日Qt簡(jiǎn)介簡(jiǎn)介Qt的執(zhí)行過程如圖所示。Qt應(yīng)用程序初始化之后,在Qt庫(kù)的支持下響應(yīng)相應(yīng)的處理事件并且返回。82022年6月12日Qt簡(jiǎn)介簡(jiǎn)介該實(shí)現(xiàn)過程需要Qt最主要的三個(gè)基類:QObject類、QApplication類和QWidget類。QObjectQObject類是所有能夠處理信號(hào)、槽和事件的Qt對(duì)象的基類,能夠創(chuàng)建帶有父對(duì)象及其名字的對(duì)象,對(duì)象的父對(duì)象可以看作該對(duì)象的所有者。QApplicationQApplication類負(fù)責(zé)GUI應(yīng)用程序的控制流和主要設(shè)置。它包括主事件循環(huán)體,負(fù)責(zé)處理和調(diào)度所有來自窗口系統(tǒng)和其他資源的
6、事件,并且處理應(yīng)用程序的開始、結(jié)束以及會(huì)話管理,還包括系統(tǒng)和應(yīng)用程序方面的設(shè)置。QWidgetQWidget類是所有用戶接口對(duì)象的基類,它繼承了QObject類的屬性。組件是用戶界面的單元組成部分,它接收來自鼠標(biāo)、鍵盤和其他窗口系統(tǒng)的事件,并且繪制到屏幕上。QWidget類有很多成員函數(shù),但一般不直接使用,而是通過子類繼承來使用其函數(shù)功能。例如,QPushButton、QlistBox等都是它的子類。92022年6月12日Qt簡(jiǎn)介簡(jiǎn)介在Qt程序中,事件處理采用了信號(hào)(signal)和槽(slot)機(jī)制。信號(hào)和槽機(jī)制的好處是不需要調(diào)用翻譯表,節(jié)省資源。利用信號(hào)和槽進(jìn)行對(duì)象間的通信是Qt最主要的特
7、征之一。 當(dāng)對(duì)象狀態(tài)發(fā)生改變的時(shí)候,發(fā)出signal通知所有的slot接收signal,盡管它并不知道哪些函數(shù)定義了slot,而slot也不知道要接收怎樣的signal。signal和slot機(jī)制真正實(shí)現(xiàn)了封裝的概念,但它們之間并不是一一對(duì)應(yīng)的。 顯然,由右圖可知,同一個(gè)信號(hào)可以連接到多個(gè)槽,多個(gè)信號(hào)也可以連接到同一個(gè)槽之中。隨時(shí)可以建立一個(gè)連接,或者取消一個(gè)連接。不過取消一個(gè)連接不是很常用,因?yàn)楫?dāng)一個(gè)對(duì)象被刪除后,它所包含的連接都會(huì)被自動(dòng)取消。102022年6月12日基本基本Qt程序程序 程序運(yùn)行效果程序運(yùn)行效果 組成:組成: 一個(gè)窗口一個(gè)窗口 一個(gè)字符串一個(gè)字符串 動(dòng)作:動(dòng)作: 運(yùn)行顯示窗
8、口運(yùn)行顯示窗口 關(guān)閉退出關(guān)閉退出112022年6月12日程序清單程序清單hello.cpp1 #include 頭文件頭文件2 #include 頭文件頭文件3 int main(int argc, char *argv )主函數(shù)主函數(shù)4 QApplication app(argc, argv);應(yīng)用程序?qū)ο髴?yīng)用程序?qū)ο? QLabel label (Hello Qt!, 0);標(biāo)簽對(duì)象標(biāo)簽對(duì)象6 app.setMainWidget(&label);7 label.show();顯示標(biāo)簽窗口顯示標(biāo)簽窗口8 return app.exec();啟動(dòng)程序啟動(dòng)程序9 122022年6月12日
9、程序編譯程序編譯 項(xiàng)目文件項(xiàng)目文件 項(xiàng)目文件格式:項(xiàng)目文件格式: 基本格式:基本格式:變量名變量名 值值 TEMPLATE app 含義:生成一個(gè)可執(zhí)行文件含義:生成一個(gè)可執(zhí)行文件 其它取值:其它取值:lib,subdirs,vcapp,vclib;1 TEMPLATE = app2 INCLUDEPATH += .3 CONFIG += qt warn_on release4 SOURCES += hello.cpp132022年6月12日程序編譯程序編譯 含義:含義: lib:生成庫(kù)文件:生成庫(kù)文件 subdirs:生成某個(gè)目錄下的編譯指導(dǎo)文件;:生成某
10、個(gè)目錄下的編譯指導(dǎo)文件; vcapp:生成:生成vc+支持的可執(zhí)行程序;支持的可執(zhí)行程序; vclib:生成:生成vc+支持的庫(kù)文件。支持的庫(kù)文件。 INCLUDEPATH += . 含義:將當(dāng)前目錄增加到頭文件的搜索路徑中去含義:將當(dāng)前目錄增加到頭文件的搜索路徑中去 CONFIG += qt warn_on release 含義:將含義:將CONFIG變量的值增加三個(gè)字符串變量的值增加三個(gè)字符串 其它取值:其它取值: qt:生成的目標(biāo)是基于:生成的目標(biāo)是基于Qt庫(kù)的應(yīng)用程序或者程序庫(kù);庫(kù)的應(yīng)用程序或者程序庫(kù); debug:編譯時(shí)打開調(diào)試信息;:編譯時(shí)打開調(diào)試信息; release:編譯時(shí)進(jìn)行
11、代碼優(yōu)化;:編譯時(shí)進(jìn)行代碼優(yōu)化; warn_on:編譯時(shí)盡量多地報(bào)告警告信息;:編譯時(shí)盡量多地報(bào)告警告信息; warn_off:編譯時(shí)僅報(bào)告嚴(yán)重的警告信息;:編譯時(shí)僅報(bào)告嚴(yán)重的警告信息;142022年6月12日程序編譯程序編譯 程序編譯程序編譯查看文件查看文件生成生成Makefile查看結(jié)果查看結(jié)果編譯編譯查看結(jié)果查看結(jié)果152022年6月12日程序編譯程序編譯 命令分析命令分析 必需的命令:必需的命令: qmake :根據(jù)項(xiàng)目文件生成根據(jù)項(xiàng)目文件生成Makefile make:根據(jù)生成的:根據(jù)生成的Makefile編譯代碼生成可執(zhí)編譯代碼生成可執(zhí)行文件行文件hello 生
12、成的文件:生成的文件: Makefile:指導(dǎo):指導(dǎo)make進(jìn)行編譯的文件進(jìn)行編譯的文件 hello.o:編譯源文件得到的目標(biāo)文件:編譯源文件得到的目標(biāo)文件 hello:將目標(biāo)文件鏈接后得到的可執(zhí)行文件:將目標(biāo)文件鏈接后得到的可執(zhí)行文件 程序運(yùn)行:程序運(yùn)行: 通過輸入可執(zhí)行文件名運(yùn)行:通過輸入可執(zhí)行文件名運(yùn)行: ./hello 得到程序界面得到程序界面162022年6月12日使用信號(hào)使用信號(hào)/槽的槽的Qt程序示例程序示例 程序運(yùn)行界面程序運(yùn)行界面 綠色:按鈕(綠色:按鈕(QPushButton ) 紅色:紅色:LCD數(shù)碼顯示(數(shù)碼顯示(QLCDNumber ) 藍(lán)色:編輯框(藍(lán)色:編輯框(QL
13、ineEdit ,QMultiLineEdit ) 黃色:自定義界面元素(黃色:自定義界面元素(MyWidget)quit start go lcd edit medit MyWidget 172022年6月12日使用信號(hào)使用信號(hào)/槽的槽的Qt程序示例程序示例 界面設(shè)計(jì)思路界面設(shè)計(jì)思路 整個(gè)界面為一個(gè)界面元素;整個(gè)界面為一個(gè)界面元素; 類型:類型:MyWidget 基類:基類:QWidget 其它元素組合在其它元素組合在MyWidget上;上; 界面元素:界面元素: quit start go lcd edit medit 界面布局界面布局網(wǎng)格布局網(wǎng)格布局grid (QGridLayout )
14、 元素之間通過信號(hào)元素之間通過信號(hào)/槽進(jìn)行通訊槽進(jìn)行通訊182022年6月12日使用信號(hào)使用信號(hào)/槽的槽的Qt程序示例程序示例 程序結(jié)構(gòu)程序結(jié)構(gòu) 主函數(shù):主函數(shù):main()() 功能:?jiǎn)?dòng)消息循環(huán),顯示程序界面功能:?jiǎn)?dòng)消息循環(huán),顯示程序界面 兩個(gè)類:兩個(gè)類: 類:類:Puzzle 功能:完成產(chǎn)生隨機(jī)數(shù),并進(jìn)行判斷功能:完成產(chǎn)生隨機(jī)數(shù),并進(jìn)行判斷 類:類:MyWidget 功能:定義并放置界面元素,接受用戶輸入;功能:定義并放置界面元素,接受用戶輸入; 5個(gè)文件個(gè)文件: main.cpp:定義主函數(shù)定義主函數(shù) puzzle.h,puzzle.cpp:定義并實(shí)現(xiàn)類:定義并實(shí)現(xiàn)類Puzzle m
15、ywidget.h,mywidget.cpp:定義并實(shí)現(xiàn)類定義并實(shí)現(xiàn)類MyWidget192022年6月12日使用信號(hào)使用信號(hào)/槽的槽的Qt程序示例程序示例 文件目錄結(jié)構(gòu)文件目錄結(jié)構(gòu)當(dāng)前工作目錄當(dāng)前工作目錄 ./main.cppmywidget/mywidget.cppmywidget.hpuzzle.cpppuzzle.h202022年6月12日類結(jié)構(gòu)類結(jié)構(gòu) 類類Puzzle的結(jié)構(gòu)的結(jié)構(gòu) 符號(hào)含義:符號(hào)含義: :共有,:共有,public :私有,:私有,private 成員說明:成員說明: answer:猜數(shù)字的答案;:猜數(shù)字的答案; gen_answer():產(chǎn)生隨機(jī)數(shù)答案;產(chǎn)生隨機(jī)數(shù)答
16、案; get_answer():返回答案值;返回答案值; judge():將用戶的猜測(cè)和答案比較,得出比較結(jié):將用戶的猜測(cè)和答案比較,得出比較結(jié)果;果; start():開始,調(diào)用過程產(chǎn)生答案;開始,調(diào)用過程產(chǎn)生答案;- int answer- int gen_answer()+int judge()+int get_answer()+void start()Puzzle212022年6月12日QWidgetMyWidget-quit,start,lcd,grid-edit,go,medit-count,guess-puzzle#closeEvent-init(),finalize(),get
17、Answer(),-showMsg()closeSignal()+onStart()+onGo()+onClose()類結(jié)構(gòu)類結(jié)構(gòu) 類類MyWidget結(jié)構(gòu)結(jié)構(gòu) 符號(hào)含義:符號(hào)含義: +、-、#:共有、私有、保護(hù)共有、私有、保護(hù) 三角:繼承關(guān)系三角:繼承關(guān)系 紅色:型號(hào)紅色:型號(hào) 綠色:槽綠色:槽 成員說明:成員說明: quit、start、lcd、edit、go、medit:界面上的元素:界面上的元素 grid:網(wǎng)格布局:網(wǎng)格布局 count:用戶猜測(cè)的次數(shù):用戶猜測(cè)的次數(shù) guess:用戶的猜測(cè):用戶的猜測(cè) puzzle:對(duì)象,完成產(chǎn)生隨機(jī):對(duì)象,完成產(chǎn)生隨機(jī)數(shù),并判斷的功能數(shù),并判斷的功
18、能222022年6月12日類結(jié)構(gòu)類結(jié)構(gòu) 成員說明:成員說明: closeEvent:重載基類的方法;:重載基類的方法; init():游戲初始化;:游戲初始化; finalize():游戲結(jié)束的動(dòng)作游戲結(jié)束的動(dòng)作 getAnswer():得到用戶輸入的答案得到用戶輸入的答案 showMsg():根據(jù)用戶的猜測(cè),給出提示信息根據(jù)用戶的猜測(cè),給出提示信息 onStart():用戶點(diǎn)擊用戶點(diǎn)擊start按鈕的動(dòng)作按鈕的動(dòng)作 onGo():用戶點(diǎn)擊用戶點(diǎn)擊go按鈕的動(dòng)作按鈕的動(dòng)作 onClose():用戶點(diǎn)擊關(guān)閉按鈕的動(dòng)作用戶點(diǎn)擊關(guān)閉按鈕的動(dòng)作 closeSignal():程序關(guān)閉時(shí),產(chǎn)生的信號(hào)。程序
19、關(guān)閉時(shí),產(chǎn)生的信號(hào)。232022年6月12日界面布局界面布局 本例中為本例中為4行行3列的布局列的布局 坐標(biāo)編碼方式和坐標(biāo)編碼方式和Gtk+略有不同略有不同2100123startquitlcdeditgomedit242022年6月12日界面布局界面布局 向容器中放置界面元素的兩個(gè)方法向容器中放置界面元素的兩個(gè)方法 占據(jù)一個(gè)單元格占據(jù)一個(gè)單元格void QGridLayout:addWidget ( QWidget * w,/欲放置的界面元素欲放置的界面元素 int row,/行編號(hào)行編號(hào) int col,/列編號(hào)列編號(hào) int alignment = 0 );/對(duì)齊方式對(duì)齊方式 占據(jù)多個(gè)單
20、元格占據(jù)多個(gè)單元格void QGridLayout:addMultiCellWidget ( QWidget * w,/欲放置的界面元素欲放置的界面元素 int fromRow,/起始行編號(hào)起始行編號(hào)int toRow, /終止行編號(hào)終止行編號(hào) int fromCol, /起始列編號(hào)起始列編號(hào)int toCol, /終止列編號(hào)終止列編號(hào)int alignment = 0 ); 252022年6月12日界面布局界面布局 元素位置參數(shù)取值元素位置參數(shù)取值元素名稱元素名稱行起始行起始行終止行終止列起始列起始列終止列終止start00quit01go12lcd02edit1101medit2302262022年6月12日項(xiàng)目文件項(xiàng)目文件增加的路徑:增加的路徑: 目錄:目錄:mywidget 文件:文件:mywidget目錄下的頭文件和目錄下的頭文件和cpp文件文件1 TEMPLATE = app2 DEPENDPATH += mywidget3 INCLUDEPATH += . mywidget4 CONFIG += qt warn_on release5 HEADERS += mywidget/mywidget.h mywidget/puzzle.h6 SOURCES += m
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高精度數(shù)字電流表項(xiàng)目提案報(bào)告模板
- 綠化養(yǎng)護(hù)試題及答案
- 電路史詩(shī)考試題及答案
- java面試讓寫面試題及答案
- ssop考試題及答案
- 地理優(yōu)勢(shì)面試題及答案
- 新分教師培訓(xùn)
- 2025年軌道車輛門系統(tǒng)項(xiàng)目申請(qǐng)報(bào)告
- 重癥肺炎的觀察與護(hù)理
- 湖南省長(zhǎng)沙市開福區(qū)長(zhǎng)沙大學(xué)附屬中學(xué)2024-2025學(xué)年高二下學(xué)期6月月考?xì)v史試題
- 大腸癌的診治及預(yù)防措施
- (完整版)附:《檔案目錄清單》
- 有機(jī)硅化學(xué)課件-有機(jī)硅化學(xué)概述
- 丹尼森組織文化模型
- 中藥煎藥室應(yīng)急預(yù)案
- 華東師大版七年級(jí)數(shù)學(xué)上冊(cè)教學(xué)課件
- 中國(guó)航天(航天科普知識(shí))PPT
- GB/T 27806-2011環(huán)氧瀝青防腐涂料
- GB/T 17949.1-2000接地系統(tǒng)的土壤電阻率、接地阻抗和地面電位測(cè)量導(dǎo)則第1部分:常規(guī)測(cè)量
- 4配電柜安全風(fēng)險(xiǎn)點(diǎn)告知牌
- 旋挖機(jī)操作手知識(shí)試卷含參考答案
評(píng)論
0/150
提交評(píng)論