




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
2023年8月3日第14章Qt圖形界面程序設(shè)計(jì)2023年8月3日主要內(nèi)容Qt的作用Qt簡介基本Qt程序示例項(xiàng)目文件利用qmake編譯程序應(yīng)用消息/槽的Qt程序示例程序結(jié)構(gòu)界面布局程序編譯2023年8月3日Qt的作用網(wǎng)絡(luò)協(xié)議X客戶端(應(yīng)用程序)X工具包、Gtk+,QtXLibX客戶端(應(yīng)用程序)X工具包、Gtk+,QtXLibX服務(wù)器設(shè)備驅(qū)動程序Qt工具包在XWindow中的作用和Gtk+一樣,是Xlib之上更高層的開發(fā)工具包,它們將底層的Xlib的API進(jìn)行封裝,提供更高級的接口,達(dá)到降低開發(fā)難度,提高開發(fā)效率的目的。
2023年8月3日Qt簡介良好的可移植性:X11:即運(yùn)行在XWindow的系統(tǒng),包括linux、unix等;windows系統(tǒng):包括windows95/98/Nt/2000/Xp/2003等;Macintosh系統(tǒng):MaxOSX;嵌入式系統(tǒng);輔助工具Qmake:簡化編譯過程QtAssist:定位幫助信息QtDesigner:輔助界面設(shè)計(jì)2023年8月3日Qt簡介Qt的維護(hù)與許可制度不是由軟件組織和基金會維護(hù);由Nokia(Trolltech)國際化的公司維護(hù);GeneralPublicLicense(GPL)、LGPL版本;雙許可證(DualLicensing)的版本商業(yè)軟件非商業(yè)軟件2023年8月3日Qt簡介界面元素的組織:以類繼承的結(jié)構(gòu)組織;基類:QWidget;事件與事件處理程序的關(guān)聯(lián):重載已有的事件處理程序;適合于已經(jīng)存在的事件處理函數(shù)利用信號/槽的機(jī)制關(guān)聯(lián)信號(事件)和信號對應(yīng)的事件。信號(signal)是對象(類)向外界發(fā)送的任意消息、事件,不僅僅是界面元素產(chǎn)生的一般消息(鼠標(biāo)、鍵盤等)。槽(slot)是可以接收消息的特殊函數(shù)。2023年8月3日Qt簡介Qt的執(zhí)行過程如圖所示。Qt應(yīng)用程序初始化之后,在Qt庫的支持下響應(yīng)相應(yīng)的處理事件并且返回。2023年8月3日Qt簡介該實(shí)現(xiàn)過程需要Qt最主要的三個(gè)基類:QObject類、QApplication類和QWidget類。QObjectQObject類是所有能夠處理信號、槽和事件的Qt對象的基類,能夠創(chuàng)建帶有父對象及其名字的對象,對象的父對象可以看作該對象的所有者。QApplicationQApplication類負(fù)責(zé)GUI應(yīng)用程序的控制流和主要設(shè)置。它包括主事件循環(huán)體,負(fù)責(zé)處理和調(diào)度所有來自窗口系統(tǒng)和其他資源的事件,并且處理應(yīng)用程序的開始、結(jié)束以及會話管理,還包括系統(tǒng)和應(yīng)用程序方面的設(shè)置。QWidgetQWidget類是所有用戶接口對象的基類,它繼承了QObject類的屬性。組件是用戶界面的單元組成部分,它接收來自鼠標(biāo)、鍵盤和其他窗口系統(tǒng)的事件,并且繪制到屏幕上。QWidget類有很多成員函數(shù),但一般不直接使用,而是通過子類繼承來使用其函數(shù)功能。例如,QPushButton、QlistBox等都是它的子類。2023年8月3日Qt簡介在Qt程序中,事件處理采用了信號(signal)和槽(slot)機(jī)制。信號和槽機(jī)制的好處是不需要調(diào)用翻譯表,節(jié)省資源。利用信號和槽進(jìn)行對象間的通信是Qt最主要的特征之一。當(dāng)對象狀態(tài)發(fā)生改變的時(shí)候,發(fā)出signal通知所有的slot接收signal,盡管它并不知道哪些函數(shù)定義了slot,而slot也不知道要接收怎樣的signal。signal和slot機(jī)制真正實(shí)現(xiàn)了封裝的概念,但它們之間并不是一一對應(yīng)的。
顯然,由右圖可知,同一個(gè)信號可以連接到多個(gè)槽,多個(gè)信號也可以連接到同一個(gè)槽之中。隨時(shí)可以建立一個(gè)連接,或者取消一個(gè)連接。不過取消一個(gè)連接不是很常用,因?yàn)楫?dāng)一個(gè)對象被刪除后,它所包含的連接都會被自動取消。2023年8月3日基本Qt程序程序運(yùn)行效果組成:一個(gè)窗口一個(gè)字符串動作:運(yùn)行顯示窗口關(guān)閉退出2023年8月3日程序清單hello.cpp1#include<qapplication.h>頭文件2#include<qlabel.h>頭文件3intmain(intargc,char*argv[]){主函數(shù)4QApplicationapp(argc,argv);應(yīng)用程序?qū)ο?QLabellabel("<i><b>HelloQt!</b><i>",0);標(biāo)簽對象6app.setMainWidget(&label);7label.show();顯示標(biāo)簽窗口8returnapp.exec();啟動程序9}2023年8月3日程序編譯項(xiàng)目文件——項(xiàng)目文件格式:基本格式:變量名=值TEMPLATE=app含義:生成一個(gè)可執(zhí)行文件其它取值:lib,subdirs,vcapp,vclib;1TEMPLATE=app2INCLUDEPATH+=.3CONFIG+=qtwarn_onrelease4SOURCES+=hello.cpp2023年8月3日程序編譯含義:lib:生成庫文件subdirs:生成某個(gè)目錄下的編譯指導(dǎo)文件;vcapp:生成vc++支持的可執(zhí)行程序;vclib:生成vc++支持的庫文件。INCLUDEPATH+=.含義:將當(dāng)前目錄增加到頭文件的搜索路徑中去CONFIG+=qtwarn_onrelease含義:將CONFIG變量的值增加三個(gè)字符串其它取值:qt:生成的目標(biāo)是基于Qt庫的應(yīng)用程序或者程序庫;debug:編譯時(shí)打開調(diào)試信息;release:編譯時(shí)進(jìn)行代碼優(yōu)化;warn_on:編譯時(shí)盡量多地報(bào)告警告信息;warn_off:編譯時(shí)僅報(bào)告嚴(yán)重的警告信息;2023年8月3日程序編譯程序編譯查看文件生成Makefile查看結(jié)果編譯查看結(jié)果2023年8月3日程序編譯命令分析必需的命令:qmake:根據(jù)項(xiàng)目文件生成Makefilemake:根據(jù)生成的Makefile編譯代碼生成可執(zhí)行文件——hello生成的文件:Makefile:指導(dǎo)make進(jìn)行編譯的文件hello.o:編譯源文件得到的目標(biāo)文件hello:將目標(biāo)文件鏈接后得到的可執(zhí)行文件程序運(yùn)行:通過輸入可執(zhí)行文件名運(yùn)行:./hello得到程序界面2023年8月3日使用信號/槽的Qt程序示例程序運(yùn)行界面綠色:按鈕(QPushButton)紅色:LCD數(shù)碼顯示(QLCDNumber)藍(lán)色:編輯框(QLineEdit,QMultiLineEdit)黃色:自定義界面元素(MyWidget)quitstartgolcdeditmeditMyWidget2023年8月3日使用信號/槽的Qt程序示例界面設(shè)計(jì)思路整個(gè)界面為一個(gè)界面元素;類型:MyWidget基類:QWidget其它元素組合在MyWidget上;界面元素:quitstartgolcdeditmedit界面布局——網(wǎng)格布局grid(QGridLayout)元素之間通過信號/槽進(jìn)行通訊2023年8月3日使用信號/槽的Qt程序示例程序結(jié)構(gòu)主函數(shù):main()功能:啟動消息循環(huán),顯示程序界面兩個(gè)類:類:Puzzle功能:完成產(chǎn)生隨機(jī)數(shù),并進(jìn)行判斷類:MyWidget功能:定義并放置界面元素,接受用戶輸入;5個(gè)文件:main.cpp:定義主函數(shù)puzzle.h,puzzle.cpp:定義并實(shí)現(xiàn)類Puzzlemywidget.h,mywidget.cpp:定義并實(shí)現(xiàn)類MyWidget2023年8月3日使用信號/槽的Qt程序示例文件目錄結(jié)構(gòu)當(dāng)前工作目錄./main.cppmywidget/mywidget.cppmywidget.hpuzzle.cpppuzzle.h2023年8月3日類結(jié)構(gòu)類Puzzle的結(jié)構(gòu)符號含義:+:共有,public-:私有,private成員說明:answer:猜數(shù)字的答案;gen_answer():產(chǎn)生隨機(jī)數(shù)答案;get_answer():返回答案值;judge():將用戶的猜測和答案比較,得出比較結(jié)果;start():開始,調(diào)用過程產(chǎn)生答案;-intanswer-intgen_answer()+intjudge()+intget_answer()+voidstart()Puzzle2023年8月3日QWidgetMyWidget-quit,start,lcd,grid
-edit,go,medit
-count,guess
-puzzle
#closeEvent
-init(),finalize(),getAnswer(),
-showMsg()
closeSignal()+onStart()
+onGo()+onClose()
類結(jié)構(gòu)類MyWidget結(jié)構(gòu)符號含義:+、-、#:共有、私有、保護(hù)三角:繼承關(guān)系紅色:型號綠色:槽成員說明:quit、start、lcd、edit、go、medit:界面上的元素grid:網(wǎng)格布局count:用戶猜測的次數(shù)guess:用戶的猜測puzzle:對象,完成產(chǎn)生隨機(jī)數(shù),并判斷的功能2023年8月3日類結(jié)構(gòu)成員說明:closeEvent:重載基類的方法;init():游戲初始化;finalize():游戲結(jié)束的動作getAnswer():得到用戶輸入的答案showMsg():根據(jù)用戶的猜測,給出提示信息onStart():用戶點(diǎn)擊start按鈕的動作onGo():用戶點(diǎn)擊go按鈕的動作onClose():用戶點(diǎn)擊關(guān)閉按鈕的動作closeSignal():程序關(guān)閉時(shí),產(chǎn)生的信號。2023年8月3日界面布局本例中為4行×3列的布局坐標(biāo)編碼方式和Gtk+略有不同2100123startquitlcdeditgomedit2023年8月3日界面布局向容器中放置界面元素的兩個(gè)方法占據(jù)一個(gè)單元格
voidQGridLayout::addWidget(
QWidget*w,//欲放置的界面元素
introw,//行編號
intcol,//列編號
intalignment=0);//對齊方式占據(jù)多個(gè)單元格
voidQGridLayout::addMultiCellWidget(
QWidget*w,//欲放置的界面元素
intfromRow,//起始行編號
inttoRow,//終止行編號
intfromCol,//起始列編號
inttoCol,//終止列編號
intalignment=0);
2023年8月3日界面布局元素位置參數(shù)取值元素名稱行起始行終止列起始列終止start00--quit01--go12--lcd02--edit1101medit23022023年8月3日項(xiàng)目文件增加的路徑:目錄:mywidget文件:mywidget目錄下的頭文件和cpp文件1TEMPLATE=app2DEPENDPATH+=mywidget3INCLUDEPATH+=.mywidget4CONFIG+=qtwarn_onrelease5HEADERS+=mywidget/mywidget.hmywidget/puzzle.h6S
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合同之二手車場地租賃合同
- 有機(jī)農(nóng)產(chǎn)品認(rèn)證咨詢服務(wù)協(xié)議
- 股份制公司運(yùn)營方案
- 體育健身行業(yè)私教課程運(yùn)動傷害免責(zé)協(xié)議
- 勞務(wù)安全責(zé)任合同
- 高效率會議組織及策劃方案
- 心理咨詢師個(gè)人咨詢免責(zé)協(xié)議書
- 股權(quán)出讓居間協(xié)議書
- 第六單元《生日》教學(xué)設(shè)計(jì)-2024-2025學(xué)年四年級下冊數(shù)學(xué)北師大版
- 第1課時(shí) 億以內(nèi)數(shù)的認(rèn)識(教學(xué)設(shè)計(jì))-2024-2025學(xué)年四年級上冊數(shù)學(xué)人教版
- 2025年房屋交易代持策劃協(xié)議書
- 2025年上半年贛州市于都縣招聘城管協(xié)管員易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 中考數(shù)學(xué)總復(fù)習(xí)第一章第3課時(shí)二次根式課件
- 天然氣脫硫完整版本
- 2025年中國電子煙行業(yè)發(fā)展前景與投資戰(zhàn)略規(guī)劃分析報(bào)告
- 貨物學(xué)基礎(chǔ) 課件 項(xiàng)目一 任務(wù)一 貨物的基本概念
- 無人機(jī)法律法規(guī)與安全飛行 第2版空域管理
- 我的小學(xué)生活
- 《商務(wù)溝通-策略、方法與案例》課件 第三章 書面溝通
- 2024具身大模型關(guān)鍵技術(shù)與應(yīng)用報(bào)告-哈爾濱工業(yè)大學(xué)
- 提高瓦屋面太陽能板安裝一次驗(yàn)收合格率
評論
0/150
提交評論