嵌入式應(yīng)用系統(tǒng)開發(fā)-QT creator進(jìn)階1_第1頁(yè)
嵌入式應(yīng)用系統(tǒng)開發(fā)-QT creator進(jìn)階1_第2頁(yè)
嵌入式應(yīng)用系統(tǒng)開發(fā)-QT creator進(jìn)階1_第3頁(yè)
嵌入式應(yīng)用系統(tǒng)開發(fā)-QT creator進(jìn)階1_第4頁(yè)
嵌入式應(yīng)用系統(tǒng)開發(fā)-QT creator進(jìn)階1_第5頁(yè)
已閱讀5頁(yè),還剩54頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

嵌入式應(yīng)用系統(tǒng)開發(fā)----QtCreator進(jìn)階一主講:一.QtCreator編寫多窗口程序

實(shí)現(xiàn)功能:程序開始出現(xiàn)一個(gè)對(duì)話框,按下按鈕后便能進(jìn)入主窗口,如果直接關(guān)閉這個(gè)對(duì)話框,便不能進(jìn)入主窗口,整個(gè)程序也將退出。當(dāng)進(jìn)入主窗口后,我們按下按鈕,會(huì)彈出一個(gè)對(duì)話框,無(wú)論如何關(guān)閉這個(gè)對(duì)話框,都會(huì)回到主窗口。一.QtCreator編寫多窗口程序

實(shí)現(xiàn)原理:程序里我們先建立一個(gè)主工程,作為主界面,然后再建立一個(gè)對(duì)話框類,將其加入工程中,然后在程序中調(diào)用自己新建的對(duì)話框類來(lái)實(shí)現(xiàn)多窗口。實(shí)現(xiàn)過(guò)程:1.首先新建“QtGui應(yīng)用”工程,工程名為nGui,選中QT模擬器,基類(Baseclass)選為QWidget。2.新建對(duì)話框類,選擇“文件—新建文件或工程”如下圖,在新建中,選擇“Qt設(shè)計(jì)師界面類”。3.選擇DialogwithoutButtons。4.類名設(shè)為myDlg。5.點(diǎn)擊Finish完成。注意這里已經(jīng)默認(rèn)將其加入到了我們剛建的工程中了。進(jìn)入myDlg控件界面6.如下圖,在mydlg.ui中拖入一個(gè)PushButton,將其上的文本改為“進(jìn)入主窗口”,在其屬性窗口中將其objectName改為enterBtn,在下面的Signalsandslotseditor中進(jìn)行信號(hào)和槽的關(guān)聯(lián),首先點(diǎn)擊“+”號(hào),添加信號(hào)和槽。其中,“發(fā)送者”設(shè)為enterBtn,“信號(hào)”設(shè)為clicked(),“接受者”設(shè)為myDlg,“槽”設(shè)為accept()。這樣就實(shí)現(xiàn)了單擊這個(gè)按鈕使這個(gè)對(duì)話框關(guān)閉并發(fā)出Accepted信號(hào)的功能。下面我們將利用這個(gè)信號(hào)。7.修改主函數(shù)main.cpp,如下:#include<QtGui/QApplication>#include"widget.h"#include"mydlg.h“//加入頭文件

intmain(intargc,char*argv[]){QApplicationa(argc,argv);Widgetw;myDlgmy1;//建立自己新建的類的對(duì)象my1

if(my1.exec()==QDialog::Accepted)//利用Accepted信號(hào)判斷enterBtn是否被按下

{

w.show();//如果被按下,顯示主窗口returna.exec();//程序一直執(zhí)行,直到主窗口關(guān)閉}elsereturn0;//如果沒(méi)被按下,則不會(huì)進(jìn)入主窗口,整個(gè)程序結(jié)束運(yùn)行

}8.如下圖,在主窗口加入按鈕,顯示文本為“彈出一個(gè)對(duì)話框”,在其上點(diǎn)擊鼠標(biāo)右鍵,在彈出的菜單中選擇“轉(zhuǎn)到槽(gotoslot)”。9.我們選擇單擊事件clicked()。10.我們?cè)趶棾龅牟酆瘮?shù)中添加一句:my2.show();my2為我們新建對(duì)話框類的另一個(gè)對(duì)象,但是my2我們還沒(méi)有定義,所以在widget.h文件中添加相應(yīng)代碼,如下,先加入頭文件,再加入my2的定義語(yǔ)句,這里我們將其放到private里,因?yàn)橐话愕暮瘮?shù)都放在public里,而變量都放在private里。#ifndefWIDGET_H#defineWIDGET_H#include<QtGui/QWidget>#include"mydlg.h“//包含頭文件namespaceUi{classWidget;}classWidget:publicQWidget{Q_OBJECTpublic:Widget(QWidget*parent=0);~Widget();private:Ui::Widget*ui;

myDlgmy2;//對(duì)my2進(jìn)行定義

privateslots:voidon_pushButton_clicked();};#endif//WIDGET_H到這里,再運(yùn)行程序,便能完成我們實(shí)驗(yàn)要求的功能了。整個(gè)程序里,我們用兩種方法實(shí)現(xiàn)了信號(hào)和槽函數(shù)的關(guān)聯(lián),第一個(gè)按鈕我們直接在設(shè)計(jì)器中實(shí)現(xiàn)其關(guān)聯(lián);第二個(gè)按鈕我們自己寫了槽函數(shù)語(yǔ)句,其實(shí)圖形的設(shè)計(jì)與直接寫代碼效果是一樣的。這個(gè)程序里我們實(shí)現(xiàn)了兩類窗口打開的方式,一個(gè)是自身消失而后打開另一個(gè)窗口,一個(gè)是打開另一個(gè)窗口而自身不消失。可以看到他們實(shí)現(xiàn)的方法是不同的。二.信號(hào)與槽實(shí)例:按鈕與顯示。1.建立新項(xiàng)目,qt控件項(xiàng)目命名:btntxt,保存路徑:/home/cwd/qt.下一步,取消勾選“影子構(gòu)建”和“qt模擬器”連續(xù)“下一步”,完成。這是會(huì)出現(xiàn)一個(gè)工程項(xiàng)目:btntxt雙擊“界面文件:mainwindow.ui”進(jìn)入“界面設(shè)計(jì)”。在界面設(shè)計(jì)器中,拖拽控件組“button”中的“pushbutton”,放置窗體中,放置兩個(gè)。第一個(gè)button其控件上的文字改為show,第二個(gè)改為close。拖拽控件組“inputwindows”中的控件“textedit”到窗體中,布局如下:建立信號(hào)與槽連接此時(shí)第一個(gè)button其名字是“pushbutton”,第二個(gè)是“pushbutton_2”,這是缺省命名,你可以修改。文本編輯框叫“textedit”。鼠標(biāo)右擊第一個(gè)button,在右鍵菜單中選擇“轉(zhuǎn)到槽”,然后在彈出窗口中選擇信號(hào)為“clicked()”。這時(shí),主窗口mainwindow.cpp中出現(xiàn)一個(gè)新的代碼段,函數(shù)名為“on_pushbuttonon_clicked()”,屬于“mainwindow”類。見(jiàn)下圖:可以在其中鍵入代碼:ui->textedit->settext(“fromthepeople,bythepeople,forthepeople”)注意,盡量采用“補(bǔ)齊”的方式輸入,可以用來(lái)檢錯(cuò),也可以幫助你熟悉命令。輸入完畢可以嘗試運(yùn)行一次,點(diǎn)擊左側(cè)欄綠色的運(yùn)行圖標(biāo),每次運(yùn)行都全面地進(jìn)行了qmake和編譯鏈接。在彈出的運(yùn)行界面上,點(diǎn)擊按鈕“show”,在上方的文本框內(nèi)會(huì)顯示:fromthepeople,bythepeople,forthepeople但此時(shí),按鈕“close”還不起作用。需要進(jìn)一步建立信號(hào)與槽的連接?;氐浇缑嬖O(shè)計(jì)窗口,選中“close”按鈕,在下方“信號(hào)與槽編輯器”窗口,點(diǎn)擊“+”號(hào),生成一個(gè)信號(hào)與槽連接。發(fā)送者選“pushbutton_2”,信號(hào)選“clicked()”,接收者選主窗體“mainwindow”,槽函數(shù)選“close()”。這樣就建立了一個(gè)信號(hào)與槽連接機(jī)制,“close”按鈕被按下,即將引發(fā)主窗體的關(guān)閉,程序退出。以上用兩種方法,建立了信號(hào)與槽的連接,這兩種方法之間是有區(qū)別的。右鍵選擇的方法,是新建一個(gè)槽函數(shù),通常用于本窗體內(nèi)部的事務(wù)。需要在槽函數(shù)中添加代碼。使用信號(hào)與槽編輯器的方法建立連接,通常是針對(duì)某窗體的原有的槽函數(shù),可以不需要添加代碼。如果把它當(dāng)做新建的槽函數(shù),將會(huì)改寫原有的槽函數(shù),引起未知錯(cuò)誤。第三種建立信號(hào)和槽連接的方法是用代碼完成。上一個(gè)實(shí)例中已經(jīng)演示了。從實(shí)例到理論解釋代碼:main.cpp#include<QtGui/QApplication>#include"mainwindow.h"intmain(intargc,char*argv[]){QApplicationa(argc,argv);MainWindoww;w.show();returna.exec();}#include<QtGui/QApplication>包含了文件qapplication.h,和qtgui.h,此文件總是被包含再同樣的源文件中,它里面包含了main()函數(shù)。這是兩個(gè)大類,窗體、控件、槽函數(shù)等等都被包容其中。#include“mainwindow.h“,這是主窗體的頭文件,intmain(intargc,char*argv[])這是main函數(shù),帶有兩個(gè)行命令參數(shù),argc和argv[]。argc是命令行變量的數(shù)量,argv[]是一個(gè)命令行變量的數(shù)組函數(shù)。QApplicationa(argc,argv);創(chuàng)建了一個(gè)QApplication對(duì)象,缺省情況下命名為a。QApplication對(duì)象是一個(gè)容器,包含了應(yīng)用程序頂層的窗口(或者一組窗口)。頂層窗口是獨(dú)一無(wú)二的,它在應(yīng)用程序中從來(lái)就沒(méi)有父窗口。因?yàn)锳pplication對(duì)象的任務(wù)是控制管理你的應(yīng)用程序,因此在每個(gè)應(yīng)用程序中只能有一個(gè)QApplication對(duì)象。此外,由于創(chuàng)建對(duì)象的過(guò)程必須初始化Qt系統(tǒng),所以在使用其它任何Qt工具之前,QApplication對(duì)象必然已經(jīng)存在了。一個(gè)Qt程序就是一個(gè)標(biāo)準(zhǔn)的C++程序。這就意味著為了啟動(dòng)程序,函數(shù)main()將被操作系統(tǒng)所調(diào)用。而且,像所有的C++程序一樣,命令行選項(xiàng)可能會(huì)也可能不會(huì)傳遞給main()函數(shù)。命令行選項(xiàng)作為初始化過(guò)程的一部分傳遞給Qt系統(tǒng),也是體現(xiàn)在QApplicationa(argc,argv)這條語(yǔ)句中。兩個(gè)命令行參數(shù):argc和argv,在a結(jié)構(gòu)中使用,因?yàn)檫@樣可以指定一些特殊的標(biāo)志和設(shè)置。例如,用-geometry參數(shù)啟動(dòng)Qt程序,將可以指定窗口顯示的位置和大小。通過(guò)修改啟動(dòng)程序的外觀信息,用戶可以自己按照喜好定義程序的外觀風(fēng)格。MainWindoww;產(chǎn)生一個(gè)窗體,名字叫“w”。這就是主窗體。w.show();讓主窗體可見(jiàn)。returna.exec();語(yǔ)句調(diào)用了exec()函數(shù)和返回系統(tǒng)一個(gè)值。Main()將控制權(quán)交給了Qt。這里,程序進(jìn)入了事件循環(huán),事件循環(huán)是一種standby模式,程序會(huì)等待用戶動(dòng)作(比如按下鼠標(biāo)或者鍵盤),用戶的動(dòng)作將會(huì)產(chǎn)生程序可以做出反應(yīng)的事件(也稱“消息”),#include"mainwindow.h"#include"ui_mainwindow.h"MainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(newUi::MainWindow){ui->setupUi(this);}MainWindow::~MainWindow(){deleteui;}voidMainWindow::on_pushButton_clicked(){ui->textEdit->setText("fromthepeople,byzhepeople,forthepeople");}#include"ui_mainwindow.h"包含界面文件ui,界面ui不是窗體,是窗體的設(shè)計(jì)器。MainWindow::MainWindow(QWidget*parent):類“MainWindow”下的一個(gè)成員函數(shù)MainWindow()。ui(newUi::MainWindow)一個(gè)ui()函數(shù),是一個(gè)界面文件。它創(chuàng)建了一個(gè)叫mainwindow的主窗體。ui->setupUi(this);這個(gè)ui()界面文件,做了一個(gè)動(dòng)作:建立“這個(gè)”界面?!皌his”的意思當(dāng)前的類。MainWindow::~MainWindow(){deleteui;}Mainwindow這個(gè)類有一個(gè)成員函數(shù)~mainwindow(),這個(gè)函數(shù)完成一個(gè)功能:刪除ui界面文件。為的是在程序退出時(shí)釋放內(nèi)存。voidMainWindow::on_pushButton_clicked(){ui->textEdit->setText("fromthepeople,byzhepeople,forthepeople");}在類Mainwindow下有一個(gè)成員函數(shù)即槽函數(shù),完成的功能是在文本框textedit中顯示一段文字。這個(gè)槽函數(shù)當(dāng)?shù)谝粋€(gè)按鈕“pushbutton’被點(diǎn)擊時(shí)被觸發(fā)。ui->textEdit->setText(“‘”)這條語(yǔ)句意思是:在ui驅(qū)動(dòng)textedit作一個(gè)設(shè)置文本內(nèi)容的動(dòng)作。信號(hào)與槽機(jī)制信號(hào)與插槽機(jī)制提供了對(duì)象間的通信機(jī)制,它易于理解和使用,并完全被Qt圖形設(shè)計(jì)器所支持。圖形用戶接口的應(yīng)用需要對(duì)用戶的動(dòng)作做出響應(yīng)。例如,當(dāng)用戶點(diǎn)擊了一個(gè)菜單項(xiàng)或是工具欄的按鈕時(shí),應(yīng)用程序會(huì)執(zhí)行某些代碼。大部分情況下,我們希望不同類型的對(duì)象之間能夠進(jìn)行通信。程序員必須把事件和相關(guān)代碼聯(lián)系起來(lái),這樣才能對(duì)事件做出響應(yīng)。以前的工具開發(fā)包使用的事件響應(yīng)機(jī)制是易崩潰的,不夠健壯的,同時(shí)也不是面向?qū)ο蟮?。Trolltech創(chuàng)立了這種新的機(jī)制,叫做“信號(hào)與插槽”。信號(hào)與插槽是一種強(qiáng)有力的對(duì)象間通信機(jī)制,它完全可以取代原始的回調(diào)和消息映射機(jī)制;信號(hào)與插槽是迅速的,類型安全的,健壯的,完全面向?qū)ο蟛⒂肅++來(lái)實(shí)現(xiàn)的一種機(jī)制。在以前,當(dāng)我們使用回調(diào)函數(shù)機(jī)制來(lái)把某段響應(yīng)代碼和一個(gè)按鈕的動(dòng)作相關(guān)聯(lián)時(shí),我們通常把那段響應(yīng)代碼寫成一個(gè)函數(shù),然后把這個(gè)函數(shù)的地址指針傳給按鈕,當(dāng)那個(gè)按鈕被按下時(shí),這個(gè)函數(shù)就會(huì)被執(zhí)行。

對(duì)于這種方式,以前的開發(fā)包不能夠確?;卣{(diào)函數(shù)被執(zhí)行時(shí)所傳遞進(jìn)來(lái)的函數(shù)參數(shù)就是正確的類型,因此容易造成進(jìn)程崩潰,另外一個(gè)問(wèn)題是,回調(diào)這種方式緊緊的綁定了圖形用戶接口的功能元素,因而很難把開發(fā)進(jìn)行獨(dú)立的分類。然后調(diào)用connect()函數(shù)把這個(gè)插槽和一個(gè)信號(hào)連接起來(lái),這樣就完成了一個(gè)事件和響應(yīng)代碼的連接。信號(hào)與插槽機(jī)制并不要求類之間互相知道細(xì)節(jié),這樣就可以相對(duì)容易的開發(fā)出代碼可高重用的類。信號(hào)與插槽機(jī)制是類型安全的,它以警告的方式報(bào)告類型錯(cuò)誤,而不會(huì)使系統(tǒng)產(chǎn)生崩潰。例如,如果一個(gè)退出按鈕的clicked()信號(hào)被連接到了一個(gè)應(yīng)用的退出函數(shù)-插槽quit()。那么一個(gè)用戶點(diǎn)擊退出鍵將使應(yīng)用程序終止運(yùn)行。上述的連接過(guò)程用代碼寫出來(lái)就是這樣connect(button,SIGNAL(clicked()),qApp,SLOT(quit()))

我們可以在Qt應(yīng)用程序的執(zhí)行過(guò)程中增加或是減少信號(hào)與插槽的連接。信號(hào)與插槽的實(shí)現(xiàn)擴(kuò)展了C++的語(yǔ)法,同時(shí)也完全利用了C++面向?qū)ο蟮奶卣?。信?hào)與插槽可

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論