版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第2次課MeeGo開(kāi)發(fā)流程與開(kāi)發(fā)根底
內(nèi)容嵌入式應(yīng)用開(kāi)發(fā)流程嵌入式應(yīng)用開(kāi)發(fā)環(huán)境嵌入式應(yīng)用開(kāi)發(fā)流程嵌入式開(kāi)發(fā)工具鏈MeeGo的開(kāi)發(fā)工具鏈宿主機(jī)與仿真機(jī)環(huán)境配置QT知識(shí)Qt介紹Qt安裝基于QT的HelloWorld例如程序Qt中主要類的介紹Qt的信號(hào)槽機(jī)制Qt中主要控件介紹一、嵌入式應(yīng)用開(kāi)發(fā)流程嵌入式應(yīng)用開(kāi)發(fā)環(huán)境交叉開(kāi)發(fā)編程語(yǔ)言嵌入式應(yīng)用開(kāi)發(fā)流程嵌入式開(kāi)發(fā)工具鏈
交叉開(kāi)發(fā)通用計(jì)算機(jī)的軟件開(kāi)發(fā)一般都是以本地〔Native〕編譯或開(kāi)發(fā)的方式進(jìn)行,嵌入式系統(tǒng)一般不支持本地環(huán)境開(kāi)發(fā),其軟件開(kāi)發(fā)通常采用交叉〔Cross〕開(kāi)發(fā)的方式。交叉開(kāi)發(fā)環(huán)境建立在宿主機(jī)〔Host〕上,宿主機(jī)又稱開(kāi)發(fā)機(jī),一般是一臺(tái)通用計(jì)算機(jī),如PC。對(duì)應(yīng)嵌入式系統(tǒng)稱為目標(biāo)〔Target〕機(jī)。目標(biāo)機(jī)指各式各樣的嵌入式設(shè)備,例如、掌上電腦等;或者是嵌入式廠商提供的一套專用于開(kāi)發(fā)的評(píng)估板〔evaluationboard〕,所以又稱開(kāi)發(fā)板;甚至是基于軟件的模擬器。開(kāi)發(fā)時(shí)使用宿主機(jī)上的交叉編譯、匯編和鏈接工具形成可在目標(biāo)機(jī)上執(zhí)行的二進(jìn)制代碼,然后把可執(zhí)行文件下載到目標(biāo)機(jī)上運(yùn)行。嵌入式系統(tǒng)開(kāi)發(fā)過(guò)程中不僅編譯〔包括鏈接等步驟〕采用交叉的方式,調(diào)試也常采用交叉的方式。交叉開(kāi)發(fā)采用交叉開(kāi)發(fā)的原因主要原因在于目標(biāo)機(jī)上往往無(wú)法進(jìn)行有效的本地編譯。目標(biāo)機(jī)硬件本身在開(kāi)發(fā)過(guò)程中還不能使用或還不夠穩(wěn)定;目標(biāo)機(jī)平臺(tái)上缺乏完整的本地編譯工具、環(huán)境;目標(biāo)機(jī)系統(tǒng)本身性能不夠?qū)е戮幾g太慢。嵌入式系統(tǒng)的軟件編譯,與Windows開(kāi)發(fā)不一樣,不僅要編譯應(yīng)用程序,還要編譯相應(yīng)的依賴庫(kù)、操作系統(tǒng)內(nèi)核等。所以一次完整的編譯非常費(fèi)時(shí)。而從硬件角度,決定編譯速度的主要因素是CPU速度、內(nèi)存容量和文件系統(tǒng)I/O速度。而這些方面在嵌入式系統(tǒng)上往往都要比PC差很多。這樣會(huì)造成目標(biāo)機(jī)系統(tǒng)上進(jìn)行本地編譯效率低下。綜合以上多方面因素的考慮,嵌入式系統(tǒng)開(kāi)發(fā)一般都采用交叉開(kāi)發(fā)方式,如交叉編譯〔包括交叉鏈接〕、交叉調(diào)試等。交叉開(kāi)發(fā)宿主機(jī)和目標(biāo)機(jī)的連接一般通過(guò)串口、并口、USB或以太網(wǎng)等連接線進(jìn)行連接。交叉開(kāi)發(fā)過(guò)程在宿主機(jī)上會(huì)安裝用于嵌入式軟件開(kāi)發(fā)的一系列工具集,例如代碼編輯工具、編譯器、連接器、調(diào)試工具、軟件配置管理工具等。開(kāi)發(fā)者在宿主機(jī)一端完成代碼編寫和調(diào)試。
交叉開(kāi)發(fā)宿主機(jī)和目標(biāo)機(jī)的差異體系結(jié)構(gòu)的不同。宿主機(jī)和目標(biāo)機(jī)通常是異構(gòu)的。宿主機(jī)一般采用x86體系結(jié)構(gòu),但是目標(biāo)機(jī)的體系結(jié)構(gòu)那么可能非x86的,如是ARM、MIPS、PowerPC等各式各樣。處理能力不同。通常宿主機(jī)的處理速度、存儲(chǔ)容量等會(huì)遠(yuǎn)遠(yuǎn)大于目標(biāo)機(jī)。運(yùn)行的操作系統(tǒng)不同。宿主機(jī)一般運(yùn)行通用操作系統(tǒng),而目標(biāo)機(jī)通常運(yùn)行各種嵌入式操作系統(tǒng)。輸入輸出方式不同。相對(duì)宿主機(jī),目標(biāo)機(jī)的輸入輸出功能可能比較單一。編程語(yǔ)言本書采用的主要語(yǔ)言由于C/C++擁有便于底層編程等諸多優(yōu)點(diǎn),目前C/C++為大多數(shù)嵌入式系統(tǒng)開(kāi)發(fā)的首選語(yǔ)言。考慮到現(xiàn)實(shí)的開(kāi)展?fàn)顩r,我們?cè)诤罄m(xù)章節(jié)的應(yīng)用開(kāi)發(fā)中首選語(yǔ)言也是C/C++。嵌入式應(yīng)用開(kāi)發(fā)流程典型的開(kāi)發(fā)流程示意圖編碼階段構(gòu)建階段部署階段調(diào)優(yōu)階段嵌入式應(yīng)用開(kāi)發(fā)流程開(kāi)發(fā)流程主要分為如下幾個(gè)階段:1.編碼階段編碼階段是軟件開(kāi)發(fā)的開(kāi)始,其任務(wù)是編寫軟件的源代碼代碼,使用的工具是各種編輯器。2.構(gòu)建階段構(gòu)建階段的任務(wù)是把代碼轉(zhuǎn)化成可以在嵌入式硬件上可執(zhí)行程序的過(guò)程。此階段包括包括編譯,鏈接、定址和打包等步驟。3.部署階段部署是把可執(zhí)行的運(yùn)行時(shí)映像或可執(zhí)行文件部署到嵌入式設(shè)備上,讓嵌入式設(shè)備在系統(tǒng)上電后可以啟動(dòng)并加載開(kāi)發(fā)者編寫的代碼。4.調(diào)優(yōu)階段〔調(diào)試、優(yōu)化階段〕此階段主要是對(duì)軟件進(jìn)行調(diào)試和性能優(yōu)化。調(diào)試:即使再有經(jīng)驗(yàn)的軟件工程師,要編寫完全沒(méi)有錯(cuò)誤的程序也是不可能的。嵌入式軟件調(diào)試的效率都比較低,因?yàn)榧词垢膭?dòng)一行代碼,都可能需要把編譯、鏈接、重定位、燒寫、下載等步驟完整走一遍,這也是調(diào)優(yōu)階段最顯著的特點(diǎn)??焖俚囟ㄎ坏絾?wèn)題可以節(jié)省大量的時(shí)間。嵌入式應(yīng)用開(kāi)發(fā)流程4.調(diào)優(yōu)階段〔調(diào)試、優(yōu)化階段〕優(yōu)化對(duì)于軟件產(chǎn)品最低目標(biāo)是能正確的運(yùn)行,還需要優(yōu)化,優(yōu)化目標(biāo)主要包括是速度性能、功耗性能、空間性能等方面,到達(dá)運(yùn)行更快,更節(jié)能,占用空間更小等目的。借助工具分析程序代碼,精確分析性能瓶頸,據(jù)此引導(dǎo)和建議開(kāi)發(fā)者進(jìn)行改進(jìn),此過(guò)程常稱為代碼剖析〔codeprofiling〕,對(duì)應(yīng)的工具常常稱為剖析器〔profiler〕或性能分析器〔performanceanalyzer〕、Intel的VTune。典型的開(kāi)發(fā)工具鏈工具鏈的概念在嵌入式軟件開(kāi)發(fā)的各個(gè)階段都相應(yīng)的工具幫助用戶來(lái)完成其工作,這些工具形成與開(kāi)發(fā)流程對(duì)應(yīng)的工具鏈〔Toolchain〕,又稱工具集。開(kāi)發(fā)階段功能描述典型工具例子編輯編輯程序的源代碼Vi、Emacs、Windows記事本編譯、鏈接將源程序編譯、鏈接成可執(zhí)行的二進(jìn)制文件gcc、icc燒寫把可執(zhí)行的二進(jìn)制程序燒寫到嵌入式系統(tǒng)內(nèi)部的ROM或Flash中,以便系統(tǒng)開(kāi)機(jī)即運(yùn)行。JFlash、SJflash調(diào)試在程序運(yùn)行的時(shí)候動(dòng)態(tài)地跟蹤程序的運(yùn)行狀態(tài)。查看程序的執(zhí)行情況,以找出程序錯(cuò)誤的原因。gdb、idb、KernelDebugger優(yōu)化分析程序性能,幫助開(kāi)發(fā)者建立運(yùn)行更快,更節(jié)能,占用空間更小程序gprof、VTune測(cè)試幫助測(cè)試人員自動(dòng)尋找程序中存在的錯(cuò)誤,減少人力花費(fèi)CETK驗(yàn)證驗(yàn)證程序邏輯上的正確性和常見(jiàn)錯(cuò)誤,特別是對(duì)某些難于測(cè)試和調(diào)試的環(huán)境ApplicationVerifier模擬/仿真模擬和仿真嵌入式軟硬件運(yùn)行環(huán)境,便于開(kāi)發(fā)者開(kāi)發(fā)和調(diào)試VmWare、DeviceEmulator嵌入式軟件開(kāi)發(fā)典型工具典型的開(kāi)發(fā)工具鏈Moblin平臺(tái)下的工具集在Linux、Moblin平臺(tái)下最有名的工具集是GNU和Intel兩家。由于GNU工具集的跨平臺(tái)、開(kāi)放性、使用廣、與其他工具兼容等特點(diǎn),使得其成為嵌入式應(yīng)用開(kāi)發(fā)的首選工具.GNU工具鏈GNU的開(kāi)發(fā)工具都是免費(fèi)的,遵循GPL協(xié)議,任何人都可以從網(wǎng)上獲取。同樣GNU也為嵌入式系統(tǒng)、x86系統(tǒng)下的軟件開(kāi)發(fā)提供了完整的工具鏈。這些工具包含編譯器、匯編器、鏈接器、調(diào)試工具等。這些工具它們可以以命令行形式單獨(dú)運(yùn)行,也可以集成到Eclipse等集成開(kāi)發(fā)環(huán)境中。功能組件說(shuō)明編輯Vi、Emacs、Ed等文本編輯器,用于編輯源代碼編譯、鏈接gcc一組多種編程語(yǔ)言的編譯器調(diào)試gdb調(diào)試器優(yōu)化gprof分析程序性能,幫助開(kāi)發(fā)者建立運(yùn)行更快的程序項(xiàng)目管理make自動(dòng)管理軟件編譯系統(tǒng)構(gòu)建autotools構(gòu)建項(xiàng)目所需的材料和文件典型的開(kāi)發(fā)工具鏈GNU工具鏈生成目標(biāo)文件的幾種途徑方法一:使用gcc命令分別編譯、鏈接各源代碼文件,生成可執(zhí)行的目標(biāo)文件。方法二:用戶編寫makefile等配置文件,然后用make一步生成可執(zhí)行的目標(biāo)文件。方法三:使用系統(tǒng)構(gòu)建自開(kāi)工具autotools制作makefile等配置文件,然后用make一步生成可執(zhí)行的目標(biāo)文件。二、MeeGo的開(kāi)發(fā)工具鏈交叉開(kāi)發(fā):宿主機(jī):生成目標(biāo)可執(zhí)行文件和調(diào)試的機(jī)器,一般是一臺(tái)PC目標(biāo)機(jī):MeeGo運(yùn)行平臺(tái),、上網(wǎng)本或者仿真器〔qemu〕MeeGo交叉開(kāi)發(fā)的實(shí)際環(huán)境MeeGo交叉開(kāi)發(fā)的仿真環(huán)境仿真仿真的情景仿真(1)仿真(2)二、MeeGo的開(kāi)發(fā)工具鏈幾個(gè)術(shù)語(yǔ)1、QEMUMeeGo的虛擬機(jī)〔emulator〕仿真環(huán)境之一或者叫仿真器。2、Xephyr(://wiki.meego/SDK/Docs/1.1/MeeGo_SDK_with_Xephyr)Xephyr是一種運(yùn)行Linux下的MeeGo仿真器。3、MADDEMADDE(MeeGoApplicationDevelopandDebugEnvironment(background))isatoolthatassistsinthedownloadandinstallationoftheTarget.〔MeeGo應(yīng)用開(kāi)發(fā)與調(diào)試環(huán)境〕是一個(gè)幫助下載與安裝目標(biāo)機(jī)的工具。4、mad-admin"mad-admin"istheMADDEcommand-linetool.YoucaninstallmultipleTargetsandswitcheasilybetweentheminQtCreator(describedlater).——我的理解:mad-admin是一個(gè)安裝MADDE和查看其安裝信息的命令行工具。5、xhost+accesscontroldisabled,clientscanconnectfromanyhost:開(kāi)放全部用戶和IP地址用戶遠(yuǎn)程使用Xserver的權(quán)限:二、MeeGo的開(kāi)發(fā)工具鏈3、宿主機(jī)Qt開(kāi)發(fā)工具鏈:$ls-l/opt/meego/meego-sdk-qt/bin1、InstallingtheMeeGoSDK——安裝對(duì)應(yīng)CPU架構(gòu)的編譯工具鏈〔1〕$sudoapt-getinstallmeego-sdk2、InstallMeeGoTarget——安裝對(duì)應(yīng)CPU架構(gòu)的編譯工具鏈(2)$sudomad-admincreate-fmeego-netbook-ia32-1.1用來(lái)下載下載meego-core-ia32-madde-sysroot-1.1-fs.tar.bz2CreateaMeeGotargetusingMADDE三、宿主機(jī)與仿真機(jī)環(huán)境配置2、配置QTCreator1、翻開(kāi)上網(wǎng)本仿真器(目標(biāo)機(jī))$madremote-rmeego-netbook-ia32-qemu-1.1.20231031.2037-sda-runtimepoweron登錄到目標(biāo)機(jī)里面去:$ssh–p6666進(jìn)入目標(biāo)機(jī)(不管是仿真器還是實(shí)際機(jī)都要執(zhí)行如下步驟),運(yùn)行如下命令:$xhost+3、配置工程的build環(huán)境4、編譯生成MeeGo目標(biāo)文件在QTCreator環(huán)境里面翻開(kāi)一個(gè).pro工程文件5、選擇目標(biāo)機(jī)Run環(huán)境6、部署運(yùn)行與停止運(yùn)行四、QT介紹Qt介紹Qt安裝基于QT的HelloWorld例如程序Qt中主要類的介紹Qt的信號(hào)槽機(jī)制Qt中主要控件介紹21Qt介紹Qt是跨平臺(tái)的應(yīng)用程序和UI框架,包括跨平臺(tái)類庫(kù)集成開(kāi)發(fā)環(huán)境跨平臺(tái)IDE一次性開(kāi)發(fā)可在不同桌面和嵌入式操作系統(tǒng)部署22Qt特征一面向?qū)ο驫t具有模塊設(shè)計(jì)和注重軟件構(gòu)件或元素的可重用性的特點(diǎn)構(gòu)件支持Qt提供信號(hào)signal和槽slot的概念,支持對(duì)象之間在彼此不知道對(duì)方的情況下合作,使得Qt適合構(gòu)件編程友好的聯(lián)機(jī)幫助Qt提供了大量的聯(lián)機(jī)參考文件23Qt特征二便利性Qt是跨平臺(tái)的GUI工具包,對(duì)編程者隱藏了處理不同窗口系統(tǒng)時(shí)的潛在問(wèn)題國(guó)際化Qt為本地化應(yīng)用提供了完全的支持,所有用戶界面文本都可以基于消息翻譯表被翻譯成各國(guó)語(yǔ)言24Qt特征三豐富的API函數(shù)Qt為開(kāi)發(fā)者提供了大量的函數(shù)可用戶化外觀Qt支持主題,基于Qt的應(yīng)用程序能夠在Windows外觀,Motif外觀以及其他一些用戶外觀主題之間切換完整的組件工具Qt編程的根本模塊叫做組件,Qt含有用來(lái)創(chuàng)立專業(yè)外觀用戶界面需要的所有組建25Qt介紹WhousesQt?WritecodeoncetotargetmultipleplatformsCreateamazinguserexperienceDomorewithlessandfasterBlendwebandnativecodeinasingleapplication26QtSDKQtSDK27Qt中主要的類介紹QObject QObject類是所有能夠處理signal,slot和事件的Qt對(duì)象的基類,原型如下:QObject::QObject(Qobject*parent=0,constchar*name=0) 在上面的函數(shù)中,如果parent為0那么構(gòu)造一個(gè)無(wú)父的對(duì)象;如果對(duì)象是一個(gè)組件,那么它會(huì)成為頂層窗口。28Qt中主要的類介紹2.QApplicationQApplication類負(fù)責(zé)GUI應(yīng)用程序的控制流和主要的設(shè)置,它包括主事件循環(huán)體,負(fù)責(zé)處理和調(diào)度所有來(lái)自窗口系統(tǒng)和其他資源的事件處理應(yīng)用程序的開(kāi)始,結(jié)束以及會(huì)話管理QApplication是QObject類的子類29Qt中主要的類介紹3.QwidgetQWidget是所有用戶接口對(duì)象的基類,繼承了QObject類的屬性組件是用戶界面的單元組成局部,接收鼠標(biāo),鍵盤和從其它窗口系統(tǒng)來(lái)的事件QWidget類有很多成員函數(shù),但一般不直接使用,而通過(guò)子類繼承來(lái)使用其函數(shù)功能QWidget是QObject類的子類30信號(hào)和槽信號(hào)和槽機(jī)制是Qt的一個(gè)主要特征,是Qt與其它工具包最不相同的局部。在圖形用戶界面編程中,經(jīng)常會(huì)出現(xiàn)窗口的一個(gè)部件發(fā)生的變化會(huì)被通知給另一個(gè)部件。Qt采用信號(hào)和槽實(shí)現(xiàn)對(duì)象部件之間的通信31信號(hào)和槽的聲明一 在Qt程序設(shè)計(jì)中,包含signals和slot的類都要加上Q_OBJECT的定義。下面給出一個(gè)在類中定義signal和slot的例子classStudent:publicQobject{
Q_OBJECT public: Student(){myMark=0;} intgetMark()const{returnmyMark;}
publicslots: voidsetMark(intnewMark);
signals: voidmarkChanged(intnewMark); private: intmyMark;}32信號(hào)和槽的聲明二Signal的發(fā)出一般在事件的處理函數(shù)中,利用emit發(fā)出signal,下面的例子中在事件處理結(jié)束后發(fā)出signal
voidStudent::setMark(intnewMark){ if(newMark!=myMark){ myMark=newMark;
emitmarkChanged(myMark); }}33信號(hào)和槽的連接一 在signal和slot聲明以后,需要使用connect()函數(shù)將它們連接起來(lái)。Connect()函數(shù)屬于QObject類的成員函數(shù),能夠連接signal和slot,也能夠連signal和signal。函數(shù)原型如下
boolconnect(constQObject*sender,constchar*signal,constQObject*receiver,constchar*slot)其中第一個(gè)和第三個(gè)參數(shù)指出signal和slot屬于的對(duì)象或組件34信號(hào)和槽的連接二 使用connect()函數(shù)進(jìn)行連接的時(shí)候,還需要用到SIGNAL()和SLOT()兩個(gè)宏,使用方法如下:
QLabel*label=newQLabel; QScrollBar*scroll=newQScrollBar; QObject::connect(scroll,SIGNAL(valueChanged(int)),label,SLOT(setNum(int)));35信號(hào)和槽的連接方式一同一個(gè)信號(hào)連接到多個(gè)槽
connect(slider,SIGNAL(valueChanged(int)),spinBox,SLOT(setValue(int))); connect(slider,SIGNAL(valueChanged(int)),this,SLOT(updateStatusBarIndicator(int)));多個(gè)信號(hào)連接到同一個(gè)槽
Connect(lcd,SIGNAL(overflow()),this,SLOT(handleMathError()));Connect(calculator,SIGNAL(divisionByZero()),this,SLOT(handleMathError()));36信號(hào)和槽的連接方式二一個(gè)信號(hào)連接到另外一個(gè)信號(hào)
connect(lineEdit,SIGNAL(textChanged(constQstring&)),this,SLOT(updateRecord(constQstring&)))取消一個(gè)連接
disconnect(lcd,SIGNAL(overflow()),this,SLOT(handleMathError())); 取消一個(gè)連接不是很常用,因?yàn)镼t會(huì)在一個(gè)對(duì)象被刪除后自動(dòng)取消這個(gè)對(duì)象所包含的所有連接37Qt安裝Qt下載:///downloads38Qt安裝下載安裝文件Qt_SDK_Lin32_offline_v1_1_beta_en.run,在linux上安裝步驟如下:1.添加執(zhí)行權(quán)限chmodu+xQt_SDK_Lin32_offline_v1_1_beta_en.run2.運(yùn)行安裝文件./Qt_SDK_Lin32_offline_v1_1_beta_en.run3.添加環(huán)境變量將Qt安裝目錄下的bin目錄參加到環(huán)境變量PATH中39HelloWorld程序?qū)嵗齽?chuàng)立目錄mkdir/examples/hello創(chuàng)立源文件touchhello.cpp編寫源文件vihello.cpp40HelloWorld程序?qū)嵗袚Q到hello目錄cd/examples/hello創(chuàng)立平臺(tái)獨(dú)立的工程文件projectfileqmake–project創(chuàng)立平臺(tái)獨(dú)立的Makefile文件qmake編譯工程make運(yùn)行程序./hello41Qt對(duì)話框?qū)υ捒蚴且环N特殊的窗口,一般用來(lái)提供反響信息或從用戶獲取輸入。給用戶提供了同應(yīng)用程序進(jìn)行交互的方式42Qt對(duì)話框模態(tài)對(duì)話框最普遍的對(duì)話框。在未消失前用戶不能夠與同一個(gè)應(yīng)用程序的其他窗口進(jìn)行交互,直到該對(duì)話框關(guān)閉。非模態(tài)對(duì)話框當(dāng)對(duì)話框翻開(kāi)的同時(shí),用戶還可與同一應(yīng)用程序的其他窗口進(jìn)行交互。43Qt對(duì)話框Qt對(duì)話框的類層次結(jié)構(gòu)圖44幾種Qt內(nèi)置對(duì)話框介紹顏色對(duì)話框QColorDialog,允許用戶選擇設(shè)置顏色錯(cuò)誤對(duì)話框QErrorDialog,顯示錯(cuò)誤信息文件對(duì)話框QFileDialog,允許用戶選擇一個(gè)或多個(gè)文件或目錄字體對(duì)話框QFontDialog,允許用戶選擇、設(shè)置字體輸入對(duì)話框QInputDialog,允許用戶輸入文本信息頁(yè)設(shè)置對(duì)話框QPageSetupDialog,可配置與打印相關(guān)的頁(yè)面設(shè)置進(jìn)度對(duì)話框QProgressDialog,指示出一項(xiàng)操作的工作進(jìn)度,而且提示用戶該操作是否停滯打印對(duì)話框QPrintDialog,配置打印機(jī)相關(guān)選項(xiàng)45幾種Qt內(nèi)置對(duì)話框介紹顏色對(duì)話框QColorDialog,允許用戶選擇設(shè)置顏色錯(cuò)誤對(duì)話框QErrorDialog,顯示錯(cuò)誤信息文件對(duì)話框QFileDialog,允許用戶選擇一個(gè)或多個(gè)文件或目錄字體對(duì)話框QFontDialog,允許用戶選擇、設(shè)置字體輸入對(duì)話框QInputDialog,允許用戶輸入文本信息頁(yè)設(shè)置對(duì)話框QPageSetupDialog,可配置與打印相關(guān)的頁(yè)面設(shè)置進(jìn)度對(duì)話框QProgressDialog,指示出一項(xiàng)操作的工作進(jìn)度,而且提示用戶該操作是否停滯打印對(duì)話框QPrintDialog,配置打印機(jī)相關(guān)選項(xiàng)46查找對(duì)話框例如通過(guò)一個(gè)簡(jiǎn)單的查找對(duì)話框的實(shí)現(xiàn)了解Qt中對(duì)話框的創(chuàng)立過(guò)程,布局管理,信號(hào)和槽機(jī)制以及一些簡(jiǎn)單控件的使用47查找對(duì)話框例如頭文件finddialog.h1#ifndefFINDDIALOG_H2#defineFINDDIALOG_H3#include<QDialog>4classQCheckBox;5classQLabel;6classQLineEdit;7classQPushButton;8classFindDialog:publicQDialog9{ 10Q_OBJECT11public: 12FindDialog(QWidget*parent=0);48查找對(duì)話框例如13signals: 14voidfindNext(constQString&str,Qt::CaseSensitivitycs); 15voidfindPrevious(constQString&str,Qt::CaseSensitivitycs);16privateslots: 17voidfindClicked(); 18voidenableFindButton(constQString&text);19private: 20QLabel*label; 21QLineEdit*lineEdit; 22QCheckBox*caseCheckBox; 23QCheckBox*backwardCheckBox; 24QPushButton*findButton; 25QPushButton*closeButton;26};27#endif
49查找對(duì)話框例如12行FindDialog的構(gòu)造函數(shù)是典型的Qt窗口部件類的定義方式。Parent參數(shù)指定了父窗口部件。該參數(shù)默認(rèn)值是一個(gè)空指針,意味著該對(duì)話框沒(méi)有父對(duì)象。13行開(kāi)始的signal局部聲明了當(dāng)用戶單擊Find按鈕時(shí)對(duì)話框發(fā)出的兩個(gè)信號(hào)。50查找對(duì)話框例如1#include<QtGui>2#include"finddialog.h"3FindDialog::FindDialog(QWidget*parent)4:QDialog(parent)5{6label=newQLabel(tr("Find&what:"));7lineEdit=newQLineEdit;8label->setBuddy(lineEdit);9caseCheckBox=newQCheckBox(tr("Match&case"));10backwardCheckBox=newQCheckBox(tr("Search&backward"));11findButton=newQPushButton(tr("&Find"));12findButton->setDefault(true);13findButton->setEnabled(false);14closeButton=newQPushButton(tr("Close"));51查找對(duì)話框例如15connect(lineEdit,SIGNAL(textChanged(constQString&)),16this,SLOT(enableFindButton(constQString&)));17connect(findButton,SIGNAL(clicked()),18this,SLOT(findClicked()));19connect(closeButton,SIGNAL(clicked()),20this,SLOT(close()));
52查找對(duì)話框例如通過(guò)connect函數(shù)實(shí)現(xiàn)了信號(hào)和槽的連接只要行編輯器中的文本發(fā)生變化,就會(huì)調(diào)用私有槽enableFindButton當(dāng)用戶單擊Find按鈕時(shí),會(huì)調(diào)用findClicked私有槽當(dāng)用戶單擊Close時(shí),對(duì)話框關(guān)閉53查找對(duì)話框例如21QHBoxLayout*topLeftLayout=newQHBoxLayout;22topLeftLayout->addWidget(label);23topLeftLayout->addWidget(lineEdit);24QVBoxLayout*leftLayout=newQVBoxLayout;25leftLayout->addLayout(topLeftLayout);26leftLayout->addWidget(caseCheckBox);27leftLayout->addWidget(backwardCheckBox);28QVBoxLayout*rightLayout=newQVBoxLayout;29rightLayout->addWidget(findButton);30rightLayout->addWidget(closeButton);31rightLayout->addStretch();32QHBoxLayout*mainLayout=newQHBoxLayout;33mainLayout->addLayout(leftLayout);34mainLayout->addLayout(rightLayout);35setLayout(mainLayout);36setWindowTitle(tr("Find"));37setFixedHeight(sizeHint().height());38}
54查找對(duì)話框例如Qt提供了布局管理器布局子窗口部件通過(guò)QHBoxLayout,QVBoxLayout和QGridLayout這三個(gè)布局的不同嵌套組合,就可以構(gòu)建出相當(dāng)復(fù)雜的對(duì)話框。55查找對(duì)話框例如39voidFindDialog::findClicked()40{41QStringtext=lineEdit->text();42Qt::CaseSensitivitycs= 43caseCheckBox->isChecked()?Qt::CaseSensitive:Qt::CaseInsensitive; 44if(backwardCheckBox->isChecked()){ 45emitfindPrevious(text,cs); 46}else{ 47emitfindNext(text,cs); 48}49}50voidFindDialog::enableFindButton(constQString&text)51{ 52findButton->setEnabled(!text.isEmpty());53}
56查找對(duì)話框例如以上兩個(gè)函數(shù)是對(duì)話框中用到的槽當(dāng)用戶單擊Find按鈕時(shí),就會(huì)調(diào)用findClicked槽。而該槽會(huì)發(fā)射findPrevious或findNext信號(hào),這取決于Searchbackward選項(xiàng)的取值只要用戶改變了行編輯器中的文本,就會(huì)調(diào)用enableFindButton槽。如果在行編輯器中有文本,該槽就會(huì)啟用Find按鈕,否那么它會(huì)禁用Find按鈕57查找對(duì)話框例如創(chuàng)立main.cpp文件測(cè)試FindDialog窗口部件1#include<QApplication>2#include"finddialog.h"3intmain(intargc,char*argv[])4{ 5QApplicationapp(argc,argv); 6FindDialog*dialog=newFindDialog; 7dialog->show(); 8returnapp.exec();9}
58Qt主窗口介紹應(yīng)用程序的主窗口提供了用于構(gòu)建應(yīng)用程序用戶界面的框架主窗口一般包括菜單欄,工具欄,狀態(tài)欄,中央窗口部件等子控件在Qt中,通過(guò)子類化QMainWindow可以創(chuàng)立一個(gè)應(yīng)用程序的主窗口59Qt主窗口介紹60Qt主窗口介紹下面通過(guò)一個(gè)簡(jiǎn)單的代碼分析了解Qt中主窗口的創(chuàng)立過(guò)程實(shí)現(xiàn)主窗口的源代碼分別放在mainwindow.h和mainwindow.cpp中61Qt主窗口介紹Mainwindow.hclassMainWindow:publicQMainWindow{Q_OBJECTpublic:MainWindow(QWidget*parent=0);~MainWindow();privateslots:voidnewFile();voidopenFile();voidcut();voidcopy();private:voidcreateActions();voidcreateMenus();voidcreateStatusBar();voidcreateToolsBar();62Qt主窗口介紹private:QMenu*fileMenu;QMenu*editMenu;QAction*newAction;QAction*openAction;QAction*cutAction;QAction*copyAction;QToolBar*fileToolBar;QToolBar*editToolBar;};63Qt主窗口介紹在頭文件中,將MainWindow類定義為QMainWindow的子類。像File->New這樣的菜單項(xiàng),在MainWindow中被實(shí)現(xiàn)為私有槽64Qt主窗口介紹mainwindow.cppMainWindow::MainWindow(QWidget*parent):QMainWindow(parent){createActions();createMenus();createToolsBar();createStatusBar();}MainWindow類的構(gòu)造函數(shù),通過(guò)調(diào)用類的私有函數(shù)createActions();createMenus();createToolsBar();createStatusBar();分別創(chuàng)立主窗口的菜單欄,工具欄和狀態(tài)欄65菜單欄和工具欄Qt通過(guò)動(dòng)作的概念簡(jiǎn)化了菜單和工具欄的編程一個(gè)動(dòng)作action就是一個(gè)可以添加到任意數(shù)量的菜單和工具欄上的項(xiàng)創(chuàng)立菜單和工具欄一般包括如下步驟:
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 齒輪教學(xué)設(shè)計(jì)(共7篇)
- 第十五章 腹外疝課件
- 福建省南平市邵武第二中學(xué)2022年高一語(yǔ)文期末試題含解析
- 2024年保密基本知識(shí)考試試題含答案(考試直接用)
- 2025年福建龍巖市上杭縣興誠(chéng)人力資源管理有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025年浙江麗水市龍泉市起點(diǎn)文化旅游發(fā)展有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025年廣西南寧富鳴城市投資發(fā)展集團(tuán)有限責(zé)任公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025年南平建陽(yáng)區(qū)市場(chǎng)監(jiān)管局招聘筆試參考題庫(kù)含答案解析
- 2025年六安中財(cái)招商投資集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 人工智能在醫(yī)療診斷中的應(yīng)用及其影響因素分析
- GB/T 10781.4-2024白酒質(zhì)量要求第4部分:醬香型白酒
- 酒店前臺(tái)員工規(guī)章制度
- 醫(yī)院食堂改進(jìn)方案及措施(2篇)
- 心內(nèi)科進(jìn)修匯報(bào)
- 視覺(jué)傳達(dá)設(shè)計(jì)教資面試
- 三創(chuàng)賽獲獎(jiǎng)-非遺文化創(chuàng)新創(chuàng)業(yè)計(jì)劃書
- MOOC 土地經(jīng)濟(jì)學(xué)-南京農(nóng)業(yè)大學(xué) 中國(guó)大學(xué)慕課答案
- 代駕服務(wù)雇傭合同
- 慢性高血壓并發(fā)重度子癇前期1
- 農(nóng)村住房質(zhì)量安全
- JTG D70-2-2014 公路隧道設(shè)計(jì)規(guī)范 第二冊(cè) 交通工程與附屬設(shè)施
評(píng)論
0/150
提交評(píng)論