




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第2次課 MeeGo開發(fā)流程與開發(fā)基礎(chǔ),內(nèi)容,嵌入式應(yīng)用開發(fā)流程 嵌入式應(yīng)用開發(fā)環(huán)境 嵌入式應(yīng)用開發(fā)流程 嵌入式開發(fā)工具鏈 MeeGo的開發(fā)工具鏈 宿主機(jī)與仿真機(jī)環(huán)境配置 QT知識(shí) Qt介紹 Qt安裝 基于QT的Hello World示例程序 Qt中主要類的介紹 Qt的信號(hào)槽機(jī)制 Qt中主要控件介紹,一、嵌入式應(yīng)用開發(fā)流程,嵌入式應(yīng)用開發(fā)環(huán)境 交叉開發(fā) 編程語言 嵌入式應(yīng)用開發(fā)流程 嵌入式開發(fā)工具鏈,交叉開發(fā),通用計(jì)算機(jī)的軟件開發(fā)一般都是以本地(Native)編譯或開發(fā)的方式進(jìn)行,嵌入式系統(tǒng)一般不支持本地環(huán)境開發(fā),其軟件開發(fā)通常采用交叉(Cross)開發(fā)的方式。 交叉開發(fā)環(huán)境建立在宿主機(jī)(Ho
2、st)上,宿主機(jī)又稱開發(fā)機(jī),一般是一臺(tái)通用計(jì)算機(jī),如PC。 對(duì)應(yīng)嵌入式系統(tǒng)稱為目標(biāo)(Target)機(jī)。目標(biāo)機(jī)指各式各樣的嵌入式設(shè)備,例如手機(jī)、掌上電腦等;或者是嵌入式廠商提供的一套專用于開發(fā)的評(píng)估板(evaluation board),所以又稱開發(fā)板;甚至是基于軟件的模擬器。 開發(fā)時(shí)使用宿主機(jī)上的交叉編譯、匯編和鏈接工具形成可在目標(biāo)機(jī)上執(zhí)行的二進(jìn)制代碼,然后把可執(zhí)行文件下載到目標(biāo)機(jī)上運(yùn)行。嵌入式系統(tǒng)開發(fā)過程中不僅編譯(包括鏈接等步驟)采用交叉的方式,調(diào)試也常采用交叉的方式。,交叉開發(fā),采用交叉開發(fā)的原因 主要原因在于目標(biāo)機(jī)上往往無法進(jìn)行有效的本地編譯。 目標(biāo)機(jī)硬件本身在開發(fā)過程中還不能使用或還
3、不夠穩(wěn)定; 目標(biāo)機(jī)平臺(tái)上缺乏完整的本地編譯工具、環(huán)境; 目標(biāo)機(jī)系統(tǒng)本身性能不夠?qū)е戮幾g太慢。 嵌入式系統(tǒng)的軟件編譯,與Windows開發(fā)不一樣,不僅要編譯應(yīng)用程序,還要編譯相應(yīng)的依賴庫、操作系統(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)開發(fā)一般都采用交叉開發(fā)方式,如交叉編譯(包括交叉鏈接)、交叉調(diào)試等。,交叉開發(fā),宿主機(jī)和目標(biāo)機(jī)的連接 一般通過串口、并口、USB或以太網(wǎng)等連接線進(jìn)行連接。 交叉開
4、發(fā)過程 在宿主機(jī)上會(huì)安裝用于嵌入式軟件開發(fā)的一系列工具集,例如代碼編輯工具、編譯器、連接器、調(diào)試工具、軟件配置管理工具等。開發(fā)者在宿主機(jī)一端完成代碼編寫和調(diào)試。,交叉開發(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ī)的輸入輸出功能可能比較單一。,編程語言,本書采用的主要語
5、言 由于C/C+擁有便于底層編程等諸多優(yōu)點(diǎn),目前C/C+為大多數(shù)嵌入式系統(tǒng)開發(fā)的首選語言??紤]到現(xiàn)實(shí)的發(fā)展?fàn)顩r,我們在后續(xù)章節(jié)的應(yīng)用開發(fā)中首選語言也是C/C+。,嵌入式應(yīng)用開發(fā)流程,典型的開發(fā)流程示意圖,編碼階段,構(gòu)建階段,部署階段,調(diào)優(yōu)階段,嵌入式應(yīng)用開發(fā)流程,開發(fā)流程主要分為如下幾個(gè)階段: 1編碼階段 編碼階段是軟件開發(fā)的開始,其任務(wù)是編寫軟件的源代碼代碼,使用的工具是各種編輯器。 2構(gòu)建階段 構(gòu)建階段的任務(wù)是把代碼轉(zhuǎn)化成可以在嵌入式硬件上可執(zhí)行程序的過程。此階段包括包括編譯,鏈接、定址和打包等步驟 。 3部署階段 部署是把可執(zhí)行的運(yùn)行時(shí)映像或可執(zhí)行文件部署到嵌入式設(shè)備上,讓嵌入式設(shè)備在系
6、統(tǒng)上電后可以啟動(dòng)并加載開發(fā)者編寫的代碼。 4調(diào)優(yōu)階段(調(diào)試、優(yōu)化階段) 此階段主要是對(duì)軟件進(jìn)行調(diào)試和性能優(yōu)化。 調(diào)試:即使再有經(jīng)驗(yàn)的軟件工程師,要編寫完全沒有錯(cuò)誤的程序也是不可能的。嵌入式軟件調(diào)試的效率都比較低,因?yàn)榧词垢膭?dòng)一行代碼,都可能需要把編譯、鏈接、重定位、燒寫、下載等步驟完整走一遍,這也是調(diào)優(yōu)階段最顯著的特點(diǎn)。快速地定位到問題可以節(jié)省大量的時(shí)間。,嵌入式應(yīng)用開發(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é)能,占用空間更小等目的。 借助工具分析程序代碼,精確分析性能瓶頸
7、,據(jù)此引導(dǎo)和建議開發(fā)者進(jìn)行改進(jìn),此過程常稱為代碼剖析(code profiling),對(duì)應(yīng)的工具常常稱為剖析器(profiler)或性能分析器(performance analyzer)、 Intel的VTune 。,典型的開發(fā)工具鏈,工具鏈的概念 在嵌入式軟件開發(fā)的各個(gè)階段都相應(yīng)的工具幫助用戶來完成其工作,這些工具形成與開發(fā)流程對(duì)應(yīng)的工具鏈(Toolchain),又稱工具集。,嵌入式軟件開發(fā)典型工具,典型的開發(fā)工具鏈,Moblin平臺(tái)下的工具集 在Linux、Moblin平臺(tái)下最有名的工具集是GNU和Intel兩家。由于GNU工具集的跨平臺(tái)、開放性、使用廣、與其他工具兼容等特點(diǎn),使得其成為嵌
8、入式應(yīng)用開發(fā)的首選工具. GNU工具鏈 GNU的開發(fā)工具都是免費(fèi)的,遵循GPL協(xié)議,任何人都可以從網(wǎng)上獲取。同樣GNU也為嵌入式系統(tǒng)、x86系統(tǒng)下的軟件開發(fā)提供了完整的工具鏈。這些工具包含編譯器、匯編器、鏈接器、調(diào)試工具等。這些工具它們可以以命令行形式單獨(dú)運(yùn)行,也可以集成到Eclipse等集成開發(fā)環(huán)境中。,典型的開發(fā)工具鏈,GNU工具鏈生成目標(biāo)文件的幾種途徑 方法一:使用gcc命令分別編譯、鏈接各源代碼文件,生成可執(zhí)行的目標(biāo)文件。 方法二:用戶編寫makefile等配置文件,然后用make一步生成可執(zhí)行的目標(biāo)文件。 方法三:使用系統(tǒng)構(gòu)建自動(dòng)工具autotools制作makefile等配置文件,
9、然后用make一步生成可執(zhí)行的目標(biāo)文件。,二、MeeGo的開發(fā)工具鏈,交叉開發(fā): 宿主機(jī):生成目標(biāo)可執(zhí)行文件和調(diào)試的機(jī)器,一般是一臺(tái)PC 目標(biāo)機(jī):MeeGo運(yùn)行平臺(tái),手機(jī)、上網(wǎng)本或者仿真器(qemu),MeeGo交叉開發(fā)的實(shí)際環(huán)境,MeeGo交叉開發(fā)的仿真環(huán)境,仿真,仿真的情景,仿真(1),仿真(2),二、MeeGo的開發(fā)工具鏈,幾個(gè)術(shù)語,1、QEMU MeeGo的虛擬機(jī)(emulator)仿真環(huán)境之一或者叫仿真器。 2、Xephyr ( Xephyr是一種運(yùn)行Linux下的MeeGo仿真器。 3、MADDE MADDE (MeeGo Application Develop and Debug
10、 Environment (background) is a tool that assists in the download and installation of the Target. (MeeGo應(yīng)用開發(fā)與調(diào)試環(huán)境)是一個(gè)幫助下載與安裝目標(biāo)機(jī)的工具。 4、mad-admin mad-admin is the MADDE command-line tool. You can install multiple Targets and switch easily between them in Qt Creator (described later). 我的理解:mad-admin是一個(gè)安
11、裝MADDE和查看其安裝信息的命令行工具。 5、xhost + access control disabled, clients can connect from any host:開放全部用戶和IP地址用戶遠(yuǎn)程使用X server的權(quán)限:,二、MeeGo的開發(fā)工具鏈,3、宿主機(jī)Qt開發(fā)工具鏈: $ ls -l /opt/meego/meego-sdk-qt/bin,1、Installing the MeeGo SDK安裝對(duì)應(yīng)CPU架構(gòu)的編譯工具鏈(1) $ sudo apt-get install meego-sdk,2、Install MeeGo Target安裝對(duì)應(yīng)CPU架構(gòu)的編譯工具鏈
12、(2),$ sudo mad-admin create -f meego-netbook-ia32-1.1 用來下載下載meego-core-ia32-madde-sysroot-1.1-fs.tar.bz2,Create a MeeGo target using MADDE,三、宿主機(jī)與仿真機(jī)環(huán)境配置,2、配置QT Creator,1、打開上網(wǎng)本仿真器(目標(biāo)機(jī)) $ mad remote -r meego-netbook-ia32-qemu-1.1.20101031.2037-sda-runtime poweron 登錄到目標(biāo)機(jī)里面去: $ ssh meego p 6666
13、 進(jìn)入目標(biāo)機(jī)(不管是仿真器還是實(shí)際機(jī)都要執(zhí)行如下步驟),運(yùn)行如下命令: $ xhost +,3、配置工程的 build 環(huán)境,4、 編譯生成 MeeGo 目標(biāo)文件,在QT Creator環(huán)境里面打開一個(gè).pro工程文件,5、選擇目標(biāo)機(jī) Run 環(huán)境,6、 部署運(yùn)行與停止運(yùn)行,四、QT介紹,Qt介紹 Qt安裝 基于QT的Hello World示例程序 Qt中主要類的介紹 Qt的信號(hào)槽機(jī)制 Qt中主要控件介紹,21,Qt介紹,Qt是跨平臺(tái)的應(yīng)用程序和UI框架,包括 跨平臺(tái)類庫 集成開發(fā)環(huán)境 跨平臺(tái)IDE 一次性開發(fā)可在不同桌面和嵌入式操作系統(tǒng)部署,22,Qt特征一,面向?qū)ο?Qt具有模塊設(shè)計(jì)和注重
14、軟件構(gòu)件或元素的可重用性的特點(diǎn) 構(gòu)件支持 Qt提供信號(hào)signal和槽slot的概念,支持對(duì)象之間在彼此不知道對(duì)方的情況下合作,使得Qt適合構(gòu)件編程 友好的聯(lián)機(jī)幫助 Qt提供了大量的聯(lián)機(jī)參考文件,23,Qt特征二,便利性 Qt是跨平臺(tái)的GUI工具包,對(duì)編程者隱藏了處理不同窗口系統(tǒng)時(shí)的潛在問題 國際化 Qt為本地化應(yīng)用提供了完全的支持,所有用戶界面文本都可以基于消息翻譯表被翻譯成各國語言,24,Qt特征三,豐富的API函數(shù) Qt為開發(fā)者提供了大量的函數(shù) 可用戶化外觀 Qt支持主題,基于Qt的應(yīng)用程序能夠在Windows外觀,Motif外觀以及其他一些用戶外觀主題之間切換 完整的組件工具 Qt編程
15、的基本模塊叫做組件,Qt含有用來創(chuàng)建專業(yè)外觀用戶界面需要的所有組建,25,Qt介紹,Who uses Qt? Write code once to target multiple platforms Create amazing user experience Do more with less and faster Blend web and native code in a single application,26,Qt SDK,Qt SDK,27,Qt中主要的類介紹,QObject QObject類是所有能夠處理signal,slot和事件的Qt對(duì)象的基類,原型如下: QObject:
16、QObject(Qobject *parent=0,const char *name=0) 在上面的函數(shù)中,如果parent為0則構(gòu)造一個(gè)無父的對(duì)象;如果對(duì)象是一個(gè)組件,則它會(huì)成為頂層窗口。,28,Qt中主要的類介紹,2. QApplication QApplication類負(fù)責(zé)GUI應(yīng)用程序的控制流和主要的設(shè)置,它包括主事件循環(huán)體,負(fù)責(zé)處理和調(diào)度所有來自窗口系統(tǒng)和其他資源的事件 處理應(yīng)用程序的開始,結(jié)束以及會(huì)話管理 QApplication是QObject類的子類,29,Qt中主要的類介紹,3. Qwidget QWidget是所有用戶接口對(duì)象的基類,繼承了 QObject類的屬性 組件是用
17、戶界面的單元組成部分,接收鼠標(biāo), 鍵盤和從其它窗口系統(tǒng)來的事件 QWidget類有很多成員函數(shù),但一般不直接使用,而通過子類繼承來使用其函數(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的例子 class Student:public Qob
18、ject Q_OBJECT public: Student() myMark = 0; int getMark() const return myMark; public slots: void setMark(int newMark); signals: void markChanged(int newMark); private: int myMark; ,32,信號(hào)和槽的聲明二,Signal的發(fā)出一般在事件的處理函數(shù)中,利用emit發(fā)出signal,下面的例子中在事件處理結(jié)束后發(fā)出signal void Student:setMark(int newMark) if(newMark !=
19、 myMark) myMark = newMark; emit markChanged(myMark); ,33,信號(hào)和槽的連接一,在signal和slot聲明以后,需要使用connect()函數(shù)將它們連接起來。Connect()函數(shù)屬于QObject類的成員函數(shù),能夠連接signal和slot,也能夠連signal和signal。函數(shù)原型如下 bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *slot) 其中第一個(gè)和第三個(gè)參數(shù)指出signal和slot屬于的
20、對(duì)象或組件,34,信號(hào)和槽的連接二,使用connect()函數(shù)進(jìn)行連接的時(shí)候,還需要用到SIGNAL()和SLOT()兩個(gè)宏,使用方法如下: QLabel *label = new QLabel; QScrollBar *scroll = new QScrollBar; QObject:connect(scroll, SIGNAL(valueChanged(int), label, SLOT(setNum(int);,35,信號(hào)和槽的連接方式一,同一個(gè)信號(hào)連接到多個(gè)槽 connect(slider, SIGNAL(valueChanged(int), spinBox, SLOT(setValu
21、e(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(textC
22、hanged(const Qstring 取消一個(gè)連接不是很常用,因?yàn)镼t會(huì)在一個(gè)對(duì)象被刪除后自動(dòng)取消這個(gè)對(duì)象所包含的所有連接,37,Qt安裝,Qt 下載 ,38,Qt安裝,下載安裝文件Qt_SDK_Lin32_offline_v1_1_beta_en.run,在linux上安裝步驟如下: 1.添加執(zhí)行權(quán)限 chmod u+x Qt_SDK_Lin32_offline_v1_1_beta_en.run 2.運(yùn)行安裝文件 ./ Qt_SDK_Lin32_offline_v1_1_beta_en.run 3. 添加環(huán)境變量 將Qt安裝目錄下的bin目錄加入到環(huán)境變量PATH中,39,Hello W
23、orld程序?qū)嵗?創(chuàng)建目錄 mkdir /examples/hello 創(chuàng)建源文件 touch hello.cpp 編寫源文件 vi hello.cpp,40,Hello World程序?qū)嵗?切換到hello目錄 cd /examples/hello 創(chuàng)建平臺(tái)獨(dú)立的工程文件project file qmake project 創(chuàng)建平臺(tái)獨(dú)立的Makefile文件 qmake 編譯工程 make 運(yùn)行程序 ./hello,41,Qt對(duì)話框,對(duì)話框是一種特殊的窗口,一般用來提供反饋信息或從用戶獲取輸入。 給用戶提供了同應(yīng)用程序進(jìn)行交互的方式,42,Qt對(duì)話框,模態(tài)對(duì)話框 最普遍的
24、對(duì)話框。在未消失前用戶不能夠與同一個(gè)應(yīng)用程序的其他窗口進(jìn)行交互,直到該對(duì)話框關(guān)閉。 非模態(tài)對(duì)話框 當(dāng)對(duì)話框打開的同時(shí),用戶還可與同一應(yīng)用程序的其他窗口進(jìn)行交互。,43,Qt對(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,允許用戶輸入文本信息 頁設(shè)置對(duì)話框QPageSetupDialog,可配置與打印相關(guān)的頁面設(shè)置
25、 進(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,允許用戶輸入文本信息 頁設(shè)置對(duì)話框QPageSetupDialog,可配置與打印相關(guān)的頁面設(shè)置 進(jìn)度對(duì)話框QProgressDialog,指示出一
26、項(xiàng)操作的工作進(jìn)度,而且提示用戶該操作是否停滯 打印對(duì)話框QPrintDialog,配置打印機(jī)相關(guān)選項(xiàng),46,查找對(duì)話框示例,通過一個(gè)簡單的查找對(duì)話框的實(shí)現(xiàn)了解Qt中對(duì)話框的創(chuàng)建過程,布局管理,信號(hào)和槽機(jī)制以及一些簡單控件的使用,47,查找對(duì)話框示例,頭文件finddialog.h 1 #ifndef FINDDIALOG_H 2 #define FINDDIALOG_H 3 #include 4 class QCheckBox; 5 class QLabel; 6 class QLineEdit; 7 class QPushButton; 8 class FindDialog : public
27、 QDialog 9 10 Q_OBJECT 11 public: 12 FindDialog(QWidget *parent = 0);,48,查找對(duì)話框示例,13 signals: 14 void findNext(const QString 27 #endif,49,查找對(duì)話框示例,12行FindDialog的構(gòu)造函數(shù)是典型的Qt窗口部件類的定義方式。Parent參數(shù)指定了父窗口部件。該參數(shù)默認(rèn)值是一個(gè)空指針,意味著該對(duì)話框沒有父對(duì)象。 13行開始的signal部分聲明了當(dāng)用戶單擊Find按鈕時(shí)對(duì)話框發(fā)出的兩個(gè)信號(hào)。,50,查找對(duì)話框示例,1 #include 2 #include fi
28、nddialog.h 3 FindDialog:FindDialog(QWidget *parent) 4 : QDialog(parent) 5 6 label = new QLabel(tr(Find ,51,查找對(duì)話框示例,15 connect(lineEdit, SIGNAL(textChanged(const QString ,52,查找對(duì)話框示例,通過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ì)話框示
29、例,21 QHBoxLayout *topLeftLayout = new QHBoxLayout; 22 topLeftLayout-addWidget(label); 23 topLeftLayout-addWidget(lineEdit); 24 QVBoxLayout *leftLayout = new QVBoxLayout; 25 leftLayout-addLayout(topLeftLayout); 26 leftLayout-addWidget(caseCheckBox); 27 leftLayout-addWidget(backwardCheckBox); 28 QVBox
30、Layout *rightLayout = new QVBoxLayout; 29 rightLayout-addWidget(findButton); 30 rightLayout-addWidget(closeButton); 31 rightLayout-addStretch(); 32 QHBoxLayout *mainLayout = new QHBoxLayout; 33 mainLayout-addLayout(leftLayout); 34 mainLayout-addLayout(rightLayout); 35 setLayout(mainLayout); 36 setWi
31、ndowTitle(tr(Find); 37 setFixedHeight(sizeHint().height(); 38 ,54,查找對(duì)話框示例,Qt提供了布局管理器布局子窗口部件 通過QHBoxLayout,QVBoxLayout和QGridLayout這三個(gè)布局的不同嵌套組合,就可以構(gòu)建出相當(dāng)復(fù)雜的對(duì)話框。,55,查找對(duì)話框示例,39 void FindDialog:findClicked() 40 41 QString text = lineEdit-text(); 42 Qt:CaseSensitivity cs = 43 caseCheckBox-isChecked() ? Qt:
32、CaseSensitive :Qt:CaseInsensitive; 44 if (backwardCheckBox-isChecked() 45 emit findPrevious(text, cs); 46 else 47 emit findNext(text, cs); 48 49 50 void FindDialog:enableFindButton(const QString 53 ,56,查找對(duì)話框示例,以上兩個(gè)函數(shù)是對(duì)話框中用到的槽 當(dāng)用戶單擊Find按鈕時(shí),就會(huì)調(diào)用findClicked槽。而該槽會(huì)發(fā)射findPrevious或findNext信號(hào),這取決于Search bac
33、kward選項(xiàng)的取值 只要用戶改變了行編輯器中的文本,就會(huì)調(diào)用enableFindButton槽。如果在行編輯器中有文本,該槽就會(huì)啟用Find按鈕,否則它會(huì)禁用Find按鈕,57,查找對(duì)話框示例,創(chuàng)建main.cpp文件測試FindDialog窗口部件 1 #include 2 #include finddialog.h 3 int main(int argc, char *argv) 4 5 QApplication app(argc, argv); 6 FindDialog *dialog = new FindDialog; 7 dialog-show(); 8 return app.ex
34、ec(); 9 ,58,Qt主窗口介紹,應(yīng)用程序的主窗口提供了用于構(gòu)建應(yīng)用程序用戶界面的框架 主窗口一般包括菜單欄,工具欄,狀態(tài)欄,中央窗口部件等子控件 在Qt中,通過子類化QMainWindow可以創(chuàng)建一個(gè)應(yīng)用程序的主窗口,59,Qt主窗口介紹,60,Qt主窗口介紹,下面通過一個(gè)簡單的代碼分析了解Qt中主窗口的創(chuàng)建過程 實(shí)現(xiàn)主窗口的源代碼分別放在mainwindow.h和mainwindow.cpp中,61,Qt主窗口介紹,Mainwindow.h class MainWindow : public QMainWindow Q_OBJECT public: MainWindow(QWidget *parent = 0); MainWindow(); private slots: void newFile(); void openFile(); void cut(); void copy(); private: void createActions(); void createMenus(); void createStatusBar(); void createToolsBar();,62,Qt主窗口介紹,private: QMenu *fileMenu; QM
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 生產(chǎn)車間安全培訓(xùn)教材
- 消防安全管理制度文檔
- 企業(yè)安全生產(chǎn)管理手冊
- 安全規(guī)程培訓(xùn)課件
- 消防安全教育培訓(xùn)表格
- 2025年自動(dòng)驅(qū)鳥設(shè)備項(xiàng)目申請報(bào)告
- 羊水過多護(hù)理
- 羅茗華焊接檢測技術(shù)課件
- 2025至2030中國進(jìn)口奶粉行業(yè)市場產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報(bào)告
- 教研組長培訓(xùn)課件
- 儀器報(bào)警分級(jí)管理制度
- 2025至2030國內(nèi)滅火機(jī)器人行業(yè)市場發(fā)展深度分析及前景趨勢與投資機(jī)會(huì)報(bào)告
- 2025年江西省中考?xì)v史試卷(含答案)
- 測量行業(yè)工作管理制度
- 2025至2030年中國瓦行業(yè)市場調(diào)研分析及發(fā)展規(guī)模預(yù)測報(bào)告
- 2025-2030年中國地理信息行業(yè)市場深度調(diào)研及前景趨勢與投資研究報(bào)告
- BA系統(tǒng)對(duì)電氣設(shè)備動(dòng)力柜(箱)的自控接口要求
- 汕尾市市直單位招聘政府聘員筆試真題2024
- 遼寧省鐵嶺市鐵嶺縣2023-2024學(xué)年七年級(jí)下學(xué)期7月期末考試地理試卷(含答案)
- 2025年全國統(tǒng)一高考數(shù)學(xué)試卷(全國二卷)
- 玻璃幕墻工程技術(shù)規(guī)范 JGJ 102-2003 知識(shí)培訓(xùn)
評(píng)論
0/150
提交評(píng)論