第14章Qt圖形界面程序設(shè)計(jì)_第1頁
第14章Qt圖形界面程序設(shè)計(jì)_第2頁
第14章Qt圖形界面程序設(shè)計(jì)_第3頁
第14章Qt圖形界面程序設(shè)計(jì)_第4頁
第14章Qt圖形界面程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

2023年8月3日第14章Qt圖形界面程序設(shè)計(jì)2023年8月3日主要內(nèi)容Qt的作用Qt簡(jiǎn)介基本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ū)動(dòng)程序Qt工具包在XWindow中的作用和Gtk+一樣,是Xlib之上更高層的開發(fā)工具包,它們將底層的Xlib的API進(jìn)行封裝,提供更高級(jí)的接口,達(dá)到降低開發(fā)難度,提高開發(fā)效率的目的。

2023年8月3日Qt簡(jiǎn)介良好的可移植性:X11:即運(yùn)行在XWindow的系統(tǒng),包括linux、unix等;windows系統(tǒng):包括windows95/98/Nt/2000/Xp/2003等;Macintosh系統(tǒng):MaxOSX;嵌入式系統(tǒng);輔助工具Qmake:簡(jiǎn)化編譯過程QtAssist:定位幫助信息QtDesigner:輔助界面設(shè)計(jì)2023年8月3日Qt簡(jiǎn)介Qt的維護(hù)與許可制度不是由軟件組織和基金會(huì)維護(hù);由Nokia(Trolltech)國(guó)際化的公司維護(hù);GeneralPublicLicense(GPL)、LGPL版本;雙許可證(DualLicensing)的版本商業(yè)軟件非商業(yè)軟件2023年8月3日Qt簡(jiǎn)介界面元素的組織:以類繼承的結(jié)構(gòu)組織;基類:QWidget;事件與事件處理程序的關(guān)聯(lián):重載已有的事件處理程序;適合于已經(jīng)存在的事件處理函數(shù)利用信號(hào)/槽的機(jī)制關(guān)聯(lián)信號(hào)(事件)和信號(hào)對(duì)應(yīng)的事件。信號(hào)(signal)是對(duì)象(類)向外界發(fā)送的任意消息、事件,不僅僅是界面元素產(chǎn)生的一般消息(鼠標(biāo)、鍵盤等)。槽(slot)是可以接收消息的特殊函數(shù)。2023年8月3日Qt簡(jiǎn)介Qt的執(zhí)行過程如圖所示。Qt應(yīng)用程序初始化之后,在Qt庫(kù)的支持下響應(yīng)相應(yīng)的處理事件并且返回。2023年8月3日Qt簡(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)和其他資源的事件,并且處理應(yīng)用程序的開始、結(jié)束以及會(huì)話管理,還包括系統(tǒng)和應(yīng)用程序方面的設(shè)置。QWidgetQWidget類是所有用戶接口對(duì)象的基類,它繼承了QObject類的屬性。組件是用戶界面的單元組成部分,它接收來自鼠標(biāo)、鍵盤和其他窗口系統(tǒng)的事件,并且繪制到屏幕上。QWidget類有很多成員函數(shù),但一般不直接使用,而是通過子類繼承來使用其函數(shù)功能。例如,QPushButton、QlistBox等都是它的子類。2023年8月3日Qt簡(jiǎn)介在Qt程序中,事件處理采用了信號(hào)(signal)和槽(slot)機(jī)制。信號(hào)和槽機(jī)制的好處是不需要調(diào)用翻譯表,節(jié)省資源。利用信號(hào)和槽進(jìn)行對(duì)象間的通信是Qt最主要的特征之一。當(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)取消。2023年8月3日基本Qt程序程序運(yùn)行效果組成:一個(gè)窗口一個(gè)字符串動(dòng)作:運(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)簽對(duì)象6app.setMainWidget(&label);7label.show();顯示標(biāo)簽窗口8returnapp.exec();啟動(dòng)程序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:生成庫(kù)文件subdirs:生成某個(gè)目錄下的編譯指導(dǎo)文件;vcapp:生成vc++支持的可執(zhí)行程序;vclib:生成vc++支持的庫(kù)文件。INCLUDEPATH+=.含義:將當(dāng)前目錄增加到頭文件的搜索路徑中去CONFIG+=qtwarn_onrelease含義:將CONFIG變量的值增加三個(gè)字符串其它取值:qt:生成的目標(biāo)是基于Qt庫(kù)的應(yīng)用程序或者程序庫(kù);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日使用信號(hào)/槽的Qt程序示例程序運(yùn)行界面綠色:按鈕(QPushButton)紅色:LCD數(shù)碼顯示(QLCDNumber)藍(lán)色:編輯框(QLineEdit,QMultiLineEdit)黃色:自定義界面元素(MyWidget)quitstartgolcdeditmeditMyWidget2023年8月3日使用信號(hào)/槽的Qt程序示例界面設(shè)計(jì)思路整個(gè)界面為一個(gè)界面元素;類型:MyWidget基類:QWidget其它元素組合在MyWidget上;界面元素:quitstartgolcdeditmedit界面布局——網(wǎng)格布局grid(QGridLayout)元素之間通過信號(hào)/槽進(jìn)行通訊2023年8月3日使用信號(hào)/槽的Qt程序示例程序結(jié)構(gòu)主函數(shù):main()功能:?jiǎn)?dòng)消息循環(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日使用信號(hào)/槽的Qt程序示例文件目錄結(jié)構(gòu)當(dāng)前工作目錄./main.cppmywidget/mywidget.cppmywidget.hpuzzle.cpppuzzle.h2023年8月3日類結(jié)構(gòu)類Puzzle的結(jié)構(gòu)符號(hào)含義:+:共有,public-:私有,private成員說明:answer:猜數(shù)字的答案;gen_answer():產(chǎn)生隨機(jī)數(shù)答案;get_answer():返回答案值;judge():將用戶的猜測(cè)和答案比較,得出比較結(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ào)含義:+、-、#:共有、私有、保護(hù)三角:繼承關(guān)系紅色:型號(hào)綠色:槽成員說明:quit、start、lcd、edit、go、medit:界面上的元素grid:網(wǎng)格布局count:用戶猜測(cè)的次數(shù)guess:用戶的猜測(cè)puzzle:對(duì)象,完成產(chǎn)生隨機(jī)數(shù),并判斷的功能2023年8月3日類結(jié)構(gòu)成員說明:closeEvent:重載基類的方法;init():游戲初始化;finalize():游戲結(jié)束的動(dòng)作getAnswer():得到用戶輸入的答案showMsg():根據(jù)用戶的猜測(cè),給出提示信息onStart():用戶點(diǎn)擊start按鈕的動(dòng)作onGo():用戶點(diǎn)擊go按鈕的動(dòng)作onClose():用戶點(diǎn)擊關(guān)閉按鈕的動(dòng)作closeSignal():程序關(guān)閉時(shí),產(chǎn)生的信號(hào)。2023年8月3日界面布局本例中為4行×3列的布局坐標(biāo)編碼方式和Gtk+略有不同2100123startquitlcdeditgomedit2023年8月3日界面布局向容器中放置界面元素的兩個(gè)方法占據(jù)一個(gè)單元格

voidQGridLayout::addWidget(

QWidget*w,//欲放置的界面元素

introw,//行編號(hào)

intcol,//列編號(hào)

intalignment=0);//對(duì)齊方式占據(jù)多個(gè)單元格

voidQGridLayout::addMultiCellWidget(

QWidget*w,//欲放置的界面元素

intfromRow,//起始行編號(hào)

inttoRow,//終止行編號(hào)

intfromCol,//起始列編號(hào)

inttoCol,//終止列編號(hào)

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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論