Qt用戶界面設計.pptx_第1頁
Qt用戶界面設計.pptx_第2頁
Qt用戶界面設計.pptx_第3頁
Qt用戶界面設計.pptx_第4頁
Qt用戶界面設計.pptx_第5頁
已閱讀5頁,還剩569頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、QtQt的作用Qt的特性及優(yōu)勢Qt的系統的架構如何學習Qt1Qt簡介 圖形用戶界面(Graphical User Interface)是指采用圖形方式顯示的計算機操作用戶界面對比:早期的操作系統,如DOS,CUI(Command line User Interface)命令行模式的人機接口組成部分:桌面、視窗、菜單、按鈕、圖標等Qt是跨平臺的C+應用程序和UI開發(fā)的框架Qt4有超過500個類和9000多個函數,使用Qt可以迅速開發(fā)出期望的應用程序2Qt在整個產品開發(fā)中的作用構建桌面環(huán)境;為應用程序提供可視化的、友好的界面;利用Qt類庫自帶的功能構建復雜應用程序;使用Qt構建的產品: /qt-i

2、n-use3Qt的特性及優(yōu)勢 易于獲取,個人應用完全免費全面的、藝術級的應用程序框架良好的跨平臺性,一勞永逸多語言的支持4包含Qt的系統的架構5包含Qt的系統的架構6學習Qt可用的資源 NO1: Qt參考文檔,包括類的簡介、類相關函數的介紹、自帶例程的源碼及講解、函數的查找和使用、核心特性、關鍵技術等NO2: Qt中文論壇 NO3: C+GUI Programming with Qt4,Second Edition -官方參考文檔,講解精到7Qt學習方法NO1:學習Qt自帶教程,Qt的example及其參考代碼。參考qtdemo程序,學習demo完成自己的程序。NO2: 閱讀書籍,隨書進行編程

3、練習。如C+GUI Qt4編程,提供有完善的代碼8Qt程序開發(fā)QtCreator介紹Hello Qt!程序開發(fā)流程幾個Qt練習9Qt Creator的設計目標是使開發(fā)人員能夠利用Qt 這個應 用程序框架更加快速及輕易的完成開發(fā)任務。Nokia 收購Qt之后在Qt的工具上做了很大的工作,推出的 一款新的輕量級集成開發(fā)環(huán)境(IDE), 即QtCreator。QtCreator IDE 能夠跨平臺運行,支持的系統包括 Linux (32 位及 64 位)、Mac OS、Windows等。10功能介紹:項目生成向導高級 C+ 代碼編輯器文件及類管理工具集成了Qt Designer集成了qmake 構建

4、工具集成了圖形化的 GDB 調試前端11利用QtCreator開發(fā)Qt應用程序的基本流程:創(chuàng)建工程項工程中添加文件設計界面編寫代碼實現功能調試運行12創(chuàng)建工程打開QtCreator,“File-New File or Project”,選擇 “Qt4 Gui Application”13輸入工程名稱:如ex01_helloQt選擇工程路徑:如D:project14根據應用選擇功能模塊,此工程保持默認即可。15創(chuàng)建Qt4 Gui Application時,向導會自動生成一個新類,將來可在 該類中完成應用程序的功能。此步設置該類名稱,選擇基類名稱,及設置該類代碼的文件名稱另外,設置是否要生成UI文

5、件,如果生成則,將來可以在UI文件 中來繪制界面。16最后一步“Finish”即可完成工程創(chuàng)建17在工程管理窗口中雙擊Forms下的mywidget.ui(UI文件),即可打開Qt Designer(Qt界面設計器)在Designer中設計界面18編譯運行程序:在工程名上右鍵,選擇Run19運行效果:20練習1:隱藏“HelloQt!” 設計兩個按鈕和一個Label,當點擊“show”按鈕時顯示“HelloQt!”,點擊“Hide”按鈕時隱藏“HelloQt!”。21按照Hellot方法創(chuàng)建工程,并繪制界面。22添加功能:t使用信號和槽機制可以很容易的實現對象之間的通信,當某些 事件發(fā)生時,對

6、應的信號會被發(fā)送。可以將一個對象的信號和其他對象的槽相連,這樣,當信號發(fā)送 是,和他相連的槽函數即可被調用。23編輯信號和槽:Edit-Edit signal/slots (F4)編輯對象:Edit-Edit idgets (F3)F4之后,左鍵拖動“Show”到“HelloQT”上,釋放鼠標,會彈出信 號和槽對話框24選擇連接clicked()信號和show()槽25同樣的方法連接“Hide”的clicked()信號和“HelloQt”的show()槽 連接好后如下圖示如果要編輯部件,按F3回到部件編輯狀態(tài)即可最后編譯運行程序,觀察現象26練習:控制LCDNumber顯示 通過slider(

7、滑塊)和dial(旋鈕)控制 LCDNumber上顯示的數字27Qt Creator編譯的程序,在其工程文件夾下會有一個debug文件夾,其中有程序的.exe可執(zhí)行文件。但Qt Creator默認是用動態(tài)鏈接的,就是可執(zhí)行程序在運行時需要相應的.dll文件。我們點擊生成的.exe文件,首先可能顯示“沒有找到mingwm10.dll,因此這個應用程序未能啟動。重新安裝應用程序可能會修復此問題?!北硎救鄙賛ingwm10.dll文件。28解決這個問題我們可以將相應的.dll文件放到系統中。在Qt Creator的安裝目錄的qt文件下的bin文件夾下(比如安裝在了D盤,所以路徑是D:Qt2009.0

8、4qtbin),可以找到所有的相關.dll文件。方法一:在這里找到mingwm10.dll文件,將其復制到C:WINDOWSsystem文件夾下即可。下面再提示缺少什么dll文件,都像這樣解決就可以了。 方法二:將這些dll文件都與.exe文件放到同一個文件夾下。不過這樣每個.exe文件都要放一次。方法三:將D:Qt2009.04qtbin加入系統Path環(huán)境變量。右擊我的電腦-屬性-高級-環(huán)境變量-在系統變量列表中找到Path,將路徑加入其中即可。 29用純源碼編寫:1.新建空的Qt工程。 302.工程名為hello world,并選擇工程保存路徑 313.在新建好的工程中添加文件。右擊工程

9、文件夾,彈出的菜單中選擇Add New。324.選擇普通文件。點擊Ok335.文件名為main.cpp,點擊Next進入下一步。346.這里自動將這個文件添加到了新建的工程中。保持默認設置,點擊完成。357.在main.cpp文件中添加代碼。368.這時點擊運行,程序執(zhí)行了,但看不到效果,因為程序里什么也沒做。我們點擊信息框右上角的紅色方塊,停止程序運行。 379.我們再更改代碼。添加一個對話框對象。3810.運行效果如下。3911.我們更改代碼如下,在對話框上添加一個標簽對象,并顯示hello world。4012.運行效果如下。41二、Qt Creator編寫多窗口程序實現功能: 程序開始

10、出現一個對話框,按下按鈕后便能進入主窗口,如果直接關閉這個對話框,便不能進入主窗口,整個程序也將退出。當進入主窗口后,我們按下按鈕,會彈出一個對話框,無論如何關閉這個對話框,都會回到主窗口。實現原理: 程序里我們先建立一個主工程,作為主界面,然后再建立一個對話框類,將其加入工程中,然后在程序中調用自己新建的對話框類來實現多窗口。42實現過程:1.首先新建Qt4 Gui Application工程,工程名為nGui,Base class選為QWidget。建立好后工程文件列表如下圖。432.新建對話框類,如下圖,在新建中,選擇Qt Designer Form Class。 443.選擇Dialo

11、g without Buttons。 454.類名設為myDlg。465.點擊Finish完成。注意這里已經默認將其加入到了我們剛建的工程中了。 476.如下圖,在mydlg.ui中拖入一個Push Button,將其上的文本改為“進入主窗口”,在其屬性窗口中將其objectName改為enterBtn(Push Button名字),在下面的Signals and slots editor中進行信號和槽的關聯,其中,Sender設為enterBtn,Signal設為clicked(),Receive設為myDlg,Slot設為accept()。這樣就實現了單擊這個按鈕使這個對話框關閉并發(fā)出Ac

12、cepted信號的功能。下面我們將利用這個信號。 487.修改主函數main.cpp,如下:#include #include “widget.h”#include “mydlg.h” /加入頭文件int main(int argc, char *argv) QApplication a(argc, argv); Widget w; myDlg my1; /建立自己新建的類的對象my1 if(my1.exec()=QDialog:Accepted) /利用Accepted信號判斷enterBtn是否被按下 w.show(); /如果被按下,顯示主窗口 return a.exec(); /程序一

13、直執(zhí)行,直到主窗口關閉 else return 0; /如果沒被按下,則不會進入主窗口,整個程序結束運行主函數必須這么寫,才能完成所要的功能。49到這里,我們就實現了一個界面結束執(zhí)行,然后彈出另一個界面的程序。下面我們在主窗口上加一個按鈕,按下該按鈕,彈出一個對話框,但這個對話框關閉,不會使主窗口關閉。8.如下圖,在主窗口加入按鈕,顯示文本為“彈出一個對話框”,在其上點擊鼠標右鍵,在彈出的菜單中選擇go to slot。509.我們選擇單擊事件clicked()。5110.我們在彈出的槽函數中添加一句: my2.show(); my2為我們新建對話框類的另一個對象,但是my2我們還沒有定義,所

14、以在widget.h文件中添加相應代碼,如下,先加入頭文件,再加入my2的定義語句,這里我們將其放到private里,因為一般的函數都放在public里,而變量都放在private里。52#ifndef WIDGET_H#define WIDGET_H#include #include “mydlg.h” /包含頭文件namespace Uiclass Widget;class Widget : public QWidgetQ_OBJECTpublic:Widget(QWidget *parent = 0);Widget();private:Ui:Widget *ui;myDlg my2; /

15、對my2進行定義private slots:void on_pushButton_clicked();#endif / WIDGET_H53到這里,再運行程序,便能完成我們實驗要求的功能了。整個程序里,我們用兩種方法實現了信號和槽函數的關聯,第一個按鈕我們直接在設計器中實現其關聯;第二個按鈕我們自己寫了槽函數語句,其實圖形的設計與直接寫代碼效果是一樣的。54三、Qt Creator登錄對話框實現功能:在彈出對話框中填寫用戶名和密碼,按下登錄按鈕,如果用戶名和密碼均正確則進入主窗口,如果有錯則彈出警告對話框。實現原理:通過上節(jié)的多窗口原理實現由登錄對話框進入主窗口,而用戶名和密碼可以用if語句進

16、行判斷。55實現過程:1.先新建Qt4 Gui Application工程,工程名為mainWidget,選用QWidget作為Base class,這樣便建立了主窗口。文件列表如下:562.然后新建一個Qt Designer Form Class類,類名為loginDlg,選用Dialog without Buttons,將其加入上面的工程中。文件列表如下:573.在logindlg.ui中設計下面的界面:行輸入框為Line Edit。其中用戶名后面的輸入框在屬性中設置其object Name為usrLineEdit,密碼后面的輸入框為pwdLineEdit,登錄按鈕為loginBtn,退出

17、按鈕為exitBtn。584.將exitBtn的單擊后效果設為退出程序,關聯如下:595.右擊登錄按鈕選擇go to slot,再選擇clicked(),然后進入其單擊事件的槽函數,寫入一句 void loginDlg:on_loginBtn_clicked() accept();606.改寫main.cpp:#include #include “widget.h”#include “l(fā)ogindlg.h”int main(int argc, char *argv) QApplication a(argc, argv); Widget w; loginDlg login; if(login.e

18、xec()=QDialog:Accepted) w.show(); return a.exec(); else return 0;617.這時執(zhí)行程序,可實現按下登錄按鈕進入主窗口,按下退出按鈕退出程序。8.添加用戶名密碼判斷功能。將登陸按鈕的槽函數改為:void loginDlg:on_loginBtn_clicked()if (ui-usrLineEdit-text()=tr(“qt”)&ui-pwdLineEdit-text()=tr(“123456)/判斷用戶名和密碼是否正確accept();elseQMessageBox:warning(this,tr(“Warning”),tr(“

19、user name or password error!”),QMessageBox:Yes);/如果不正確,彈出警告對話框并在logindlg.cpp中加入#include 的頭文件。如果不加這個頭文件,QMessageBox類不可用。629.這時再執(zhí)行程序,輸入用戶名為qt,密碼為123456,按登錄按鈕便能進入主窗口了,如果輸入錯了,就會彈出警告對話框。63如果輸入錯誤,便會彈出警告提示框:6410.在logindlg.cpp的loginDlg類構造函數里,添上初始化語句,使密碼顯示為小黑點。loginDlg:loginDlg(QWidget *parent) :QDialog(pare

20、nt),ui(new Ui:loginDlg)ui-setupUi(this);ui- pwdLineEdit- setEchoMode(QLineEdit:Password);65效果如下:6611.如果輸入如下圖中的用戶名,在用戶名前不小心加上了一些空格,結果程序按錯誤的用戶名對待了。67我們可以更改if判斷語句,使這樣的輸入也算正確。void loginDlg:on_loginBtn_clicked()if(ui-usrLineEdit-text().trimmed()=tr(“qt”)&ui-pwdLineEdit-text()=tr(“123456)accept();elseQMes

21、sageBox:warning(this,tr(“Warning”),tr(“user name or password error!”),QMessageBox:Yes);加入的這個函數的作用就是移除字符串開頭和結尾的空白字符。6812.最后,如果輸入錯誤了,重新回到登錄對話框時,我們希望可以使用戶名和密碼框清空并且光標自動跳轉到用戶名輸入框,最終的登錄按鈕的單擊事件的槽函數如下:void loginDlg:on_loginBtn_clicked()if(ui-usrLineEdit-text().trimmed()=tr(“qt”)&ui-pwdLineEdit-text()=tr(“12

22、3456)/判斷用戶名和密碼是否正確accept();elseQMessageBox:warning(this,tr(“Warning”),tr(“user name or password error!”),QMessageBox:Yes);/如果不正確,彈出警告對話框ui-usrLineEdit-clear();/清空用戶名輸入框ui-pwdLineEdit-clear();/清空密碼輸入框ui-usrLineEdit-setFocus();/將光標轉到用戶名輸入框69最終的loginDlg.cpp文件如下圖:70四、Qt Creator添加菜單圖標1.新建Qt4 Gui Applicat

23、ion工程,將工程命名為MainWindow,其他選項默認即可。生成的窗口界面如下圖。其中最上面的為菜單欄。712.我們在Type Here那里雙擊,并輸入“文件(&F)”,這樣便可將其文件菜單的快捷鍵設為Alt+F。(注意括號最好用英文半角輸入,這樣看著美觀)723.輸入完按下Enter鍵確認即可,然后在子菜單中加入“新建(&N)”,確定后,效果如下圖。 734.我們在下面的動作編輯窗口可以看到新加的“新建”菜單。745.雙擊這一條,可打開它的編輯對話框。我們看到Icon項,這里可以更改“新建”菜單的圖標。756.我們點擊后面的號,進入資源選擇器,但現在這里面是空的。所以下面我們需要給該工程

24、添加外部資源。767.添加資源有兩種方法。一種是直接添加系統提供的資源文件,然后選擇所需圖標。另一種是自己寫資源文件。我們主要介紹第一種。新建Qt Resources file,將它命名為menu。其他默認。778.添加完后如下圖??梢钥吹教砑拥奈募閙enu.qrc。 789.我們最好先在工程文件夾里新建一個文件夾,如images,然后將需要的圖標文件放到其中。 7910.在Qt Creator的menu.qrc文件中,我們點擊Add下拉框,選擇Add Prefix。我們可以將生成的/new/prefix前綴改為其他名字,如/File。 8011.然后再選擇Add下拉框,選擇Add File

25、s。再彈出的對話框中,我們到新建的images文件夾下,將里面的圖標文件全部添加過來。 8112.添加完成后,我們在Qt Creator的File菜單里選擇Save All選項,保存所做的更改。(注意:一定要先保存剛才的qrc文件,不然在資源管理器中可能看不見自己添加的資源?。?213.這時再打開資源選擇器,可以看到我們的圖標都在這里了。(注意:如果不顯示,可以按一下上面的Reload按鈕)8314.我們將new.png作為“新建”菜單的圖標,然后點擊Shortcut,并按下Crtl+N,便能將Crtl+N作為“新建”菜單的快捷鍵。 8415.這時打開文件菜單,可以看到“新建”菜單已經有圖標了

26、。 85運行程序后效果如下。 8616.我們在工程文件夾下查看建立的menu.qrc文件,可以用寫字板將它打開。 87其具體內容如下。88第二種添加資源文件的方法。 1.首先右擊工程文件夾,在彈出的菜單中選擇Add New,添加新文件。也可以用File中的添加新文件。892.我們選擇文本文件。903.將文件名設置為menu.qrc。 914.添加好文件后將其內容修改如下。可以看到就是用第一種方法生成的menu.qrc文件的內容。 5.保存文件后,在資源管理器中可以看到添加的圖標文件。 92五、Qt Creator布局管理器的使用首先對菜單進行完善。1.我們在上一次的基礎上再加入一些常用菜單?!?/p>

27、文件”的子菜單如下圖。中間的分割線可以點擊Add Separator添加。93“編輯”子菜單的內容如下。94“幫助”子菜單的內容如下。 952.我們在動作編輯器中對各個菜單的屬性進行設置。963.我們拖動“新建”菜單的圖標,將其放到工具欄里。拖動“新建”菜單的圖標。97將其放到菜單欄下面的工具欄里。984.我們再添加其他幾個圖標。使用Append Separator可以添加分割線。 5. 如果需要刪除圖標,可以在圖標上點擊右鍵選擇Remove action即可。 99布局管理器。(這里主要以垂直布局管理器進行講解,其他類型管理器用法與之相同,其效果可自己驗證。)1.在左邊的器件欄里拖入三個Pu

28、shButton和一個Vertical Layout(垂直布局管理器)到中心面板。如下圖。1002.將這三個按鈕放入垂直布局管理器,效果如下??梢钥吹桨粹o垂直方向排列,并且寬度可以改變,但高度沒有改變。1013.我們將布局管理器整體選中,按下上面工具欄的Break Layout按鈕,便可取消布局管理器。(我們當然也可以先將按鈕移出,再按下Delete鍵將布局管理器刪除。)1024.下面我們改用分裂器部件(QSplitter)。先將三個按鈕同時選中,再按下上面工具欄的Lay Out Vertically in Splitter(垂直分裂器)。103效果如下圖。可以看到按鈕的大小可以隨之改動。這也

29、就是分裂器和布局管理器的分別。 1045.其實布局管理器不但能控制器件的布局,還有個很重要的用途是,它能使器件的大小隨著窗口大小的改變而改變。我們先在主窗口的中心拖入一個文本編輯器Text Edit。105這時直接運行程序,效果如下??梢钥吹剿拇笮『臀恢貌粫S著窗口改變。 106下面我們選中主窗口部件,然后在空白處點擊鼠標右鍵,選擇Layout-Lay Out in a Grid,使整個主窗口的中心區(qū)處于網格布局管理器中。 107可以看到,這時文本編輯器已經占據了整個主窗口的中心區(qū)。 108運行一下程序,可以看到無論怎樣拉伸窗口,文本編輯框的大小都會隨之改變。 109六、Qt Creator

30、實現文本編輯在開始正式寫程序之前,我們先要考慮一下整個流程。因為我們要寫記事本一樣的軟件,所以最好先打開windows中的記事本,進行一些簡單的操作,然后考慮怎樣去實現這些功能。再者,再強大的軟件,它的功能也是一個一個加上去的,不要設想一下子寫出所有的功能。我們這里先實現新建文件,保存文件,和文件另存為三個功能,是因為它們聯系很緊,而且這三個功能總的代碼量也不是很大。因為三個功能之間的關系并不復雜,所以我們這里便不再畫流程圖,而只是簡單描述一下。新建文件,那么如果有正在編輯的文件,是否需要保存呢?如果需要進行保存,那這個文件以前保存過嗎?如果沒有保存過,就應該先將其另存為。110下面開始按這些

31、關系寫程序。1.打開Qt Creator,在File菜單中選擇Open,然后在工程文件夾中打開MainW工程文件。先在main.cpp文件中加入以下語句,讓程序中可以使用中文。在其中加入#include 頭文件包含,再在主函數中加入下面一行:QTextCodec:setCodecForTr(QTextCodec:codecForLocale();這樣在程序中使用中文,便能在運行時顯示出來了。更改后文件如下圖。 1112.在mainwindow.h文件中的private下加入以下語句。bool isSaved; /為true時標志文件已經保存,為false時標志文件尚未保存QString cur

32、File; /保存當前文件的文件名void do_file_New(); /新建文件void do_file_SaveOrNot(); /修改過的文件是否保存void do_file_Save(); /保存文件void do_file_SaveAs(); /文件另存為bool saveFile(const QString& fileName); /存儲文件 這些是變量和函數的聲明。其中isSaved變量起到標志的作用,用它來標志文件是否被保存過。然后我們再在相應的源文件里進行這些函數的定義。1123.在mainwindow.cpp中先加入頭文件#include ,然后在構造函數里添加以下幾行代

33、碼。isSaved = false; /初始化文件為未保存過狀態(tài)curFile = tr(“未命名.txt”); /初始化文件名為“未命名.txt”setWindowTitle(curFile); /初始化主窗口的標題這是對主窗口進行初始化。效果如下。1134.然后添加“新建”操作的函數定義。void MainWindow:do_file_New() /實現新建文件的功能do_file_SaveOrNot();isSaved = false;curFile = tr(“未命名.txt”);setWindowTitle(curFile);ui-textEdit-clear(); /清空文本編輯器

34、ui-textEdit-setVisible(true); /文本編輯器可見新建文件,先要判斷正在編輯的文件是否需要保存。然后將新建的文件標志為未保存過狀態(tài)。1145.再添加do_file_SaveOrNot函數的定義。void MainWindow:do_file_SaveOrNot() /彈出是否保存文件對 話框if(ui-textEdit-document()-isModified() /如果文件被更 改過,彈出保存對話框QMessageBox box;box.setWindowTitle(tr(“警告”);box.setIcon(QMessageBox:Warning);box.set

35、Text(curFile + tr(”尚未保存,是否保存?”);box.setStandardButtons(QMessageBox:Yes | QMessageBox:No);if(box.exec() = QMessageBox:Yes) /如果選擇保存文件,則 執(zhí)行保存操作do_file_Save();115這個函數實現彈出一個對話框,詢問是否保存正在編輯的文件。 1166.再添加“保存”操作的函數定義。void MainWindow:do_file_Save() /保存文件if(isSaved) /如果文件已經被保存過,直接保存文件saveFile(curFile);else do_f

36、ile_SaveAs(); /如果文件是第一次保存,那么調用另存 為對文件進行保存時,先判斷其是否已經被保存過,如果沒有被保存過,就要先對其進行另存為操作。1177.下面是“另存為”操作的函數定義。void MainWindow:do_file_SaveAs() /文件另存為QString fileName = QFileDialog:getSaveFileName(this,tr(“另存為”),curFile);/獲得文件名if(!fileName.isEmpty() /如果文件名不為空,則保存文件內容 saveFile(fileName);118這里彈出一個文件對話框,顯示文件另存為的路徑

37、。1198.下面是實際文件存儲操作的函數定義。bool MainWindow:saveFile(const QString& fileName) /保存文件內容,因為可能保存失敗,所以具有返回值,來表明是否保存成功 QFile file(fileName); if(!file.open(QFile:WriteOnly | QFile:Text) /以只寫方式打開文件,如果打開失敗則彈出提示框并返回 QMessageBox:warning(this,tr(“保存文件”), tr(“無法保存文件 %1:n %2).arg(fileName).arg(file.errorString(); retu

38、rn false; /%1,%2表示后面的兩個arg參數的值 QTextStream out(&file); /新建流對象,指向選定的文件 out textEdit-toPlainText(); /將文本編輯器里的內容以純文本的形 式輸出到流對象中 isSaved = true; curFile = QFileInfo(fileName).canonicalFilePath(); /獲得文件的標準路徑 setWindowTitle(curFile); /將窗口名稱改為現在窗口的路徑 return true;120這個函數實現將文本文件進行存儲。下面我們對其中的一些代碼進行講解。QFile fi

39、le(fileName);一句,定義了一個QFile類的對象file,其中filename表明這個文件就是我們保存的的文件。然后我們就可以用file代替這個文件,來進行一些操作。Qt中文件的操作和C,C+很相似。對于QFile類對象怎么使用,我們可以查看幫助。點擊Qt Creator最左側的Help,在其中輸入QFile,在搜索到的列表中選擇QFile即可。這時在右側會顯示出QFile類中所有相關信息以及他們的用法和說明。121122我們往下拉,會發(fā)現下面有關于怎么讀取文件的示例代碼。 123再往下便能看到用QTextStream類對象,進行字符串輸入的例子。下面也提到了QFileInfo和Q

40、Dir等相關的類,我們可以點擊它們去看一下具體的使用說明。124上面只是做了一個簡單的說明。以后我們對自己不明白的類都可以去幫助里進行查找,這也許是我們以后要做的最多的一件事了。對于其中的英文解釋,我們最好想辦法弄明白它的大意,其實網上也有一些中文的翻譯,但最好還是從一開始就嘗試著看英文原版的幫助,這樣以后才不會對中文翻譯產生依賴。1259.雙擊mainwindow.ui文件,在圖形界面窗口下面的Action Editor動作編輯器里,我們右擊“新建”菜單一條,選擇Go to slot,然后選擇triggered(),進入其觸發(fā)事件槽函數。 126同理,進入其他兩個菜單的槽函數,將相應的操作的

41、函數寫入槽函數中。如下。void MainWindow:on_action_New_triggered() /信號和槽的關聯 do_file_New();void MainWindow:on_action_Save_triggered() do_file_Save();void MainWindow:on_action_SaveAs_triggered() do_file_SaveAs();127最終的mainwindow.cpp文件如下。128129130最終的mainwindow.h文件如下。這時點擊運行,就能夠實現新建文件,保存文件,文件另存為的功能了。 131實現打開,關閉,退出,撤銷

42、,復制,剪切,粘貼的功能。先備份上次的工程文件,然后再將其打開。1.先在mainwindow.h文件中加入函數的聲明。void do_file_Open(); /打開文件bool do_file_Load(const QString& fileName); /讀取文件1322.再在mainwindow.cpp文件中寫函數的功能實現。void MainWindow:do_file_Open()/打開文件 do_file_SaveOrNot();/是否需要保存現有文件 QString fileName = QFileDialog:getOpenFileName(this); /獲得要打開的文件的名

43、字 if(!fileName.isEmpty()/如果文件名不為空 do_file_Load(fileName); ui-textEdit-setVisible(true);/文本編輯器可見133134bool MainWindow:do_file_Load(const QString& fileName) /讀取文件 QFile file(fileName); if(!file.open(QFile:ReadOnly | QFile:Text) QMessageBox:warning(this,tr(“讀取文件”),tr(“無法讀取 文件 %1:n%2.”).arg(fileName).ar

44、g(file.errorString(); return false;/如果打開文件失敗,彈出對話框,并返回 QTextStream in(&file); ui-textEdit-setText(in.readAll();/將文件中的所有內容都寫到 文本編輯器中 curFile = QFileInfo(fileName).canonicalFilePath(); setWindowTitle(curFile); return true;135上面的打開文件函數與文件另存為函數相似,讀取文件的函數與文件存儲函數相似。1363.然后按順序加入更菜單的關聯函數,如下。void MainWindow:

45、on_action_Open_triggered() /打開操作 do_file_Open(); /void MainWindow:on_action_Close_triggered() /關閉操作 do_file_SaveOrNot(); ui-textEdit-setVisible(false);/void MainWindow:on_action_Quit_triggered() /退出操作 on_action_Close_triggered(); /先執(zhí)行關閉操作 qApp-quit(); /再退出系統,qApp是指向應用程序的全局指針/137void MainWindow:on_ac

46、tion_Undo_triggered() /撤銷操作 ui-textEdit-undo();/void MainWindow:on_action_Cut_triggered() /剪切操作 ui-textEdit-cut();/void MainWindow:on_action_Copy_triggered() /復制操作 ui-textEdit-copy();/void MainWindow:on_action_Past_triggered() /粘貼操作 ui-textEdit-paste();138139因為復制,撤銷,全選,粘貼,剪切等功能,是TextEdit默認就有的,所以我們只需

47、調用一下相應函數就行。到這里,除了查找和幫助兩個菜單的功能沒有加上以外,其他功能都已經實現了。140七、Qt Creator實現文本查找以前都用設計器設計界面,而這次我們用代碼實現一個簡單的查找對話框。對于怎么實現查找功能的,我們詳細地分步說明了怎么進行類中方法的查找和使用。其中也將Qt Creator智能化的代碼補全功能和程序中函數的聲明位置和定義位置間的快速切換進行了介紹。1.首先還是保存以前的工程,然后再將其打開。我們發(fā)現Qt Creator默認的字體有點小,可以按下Ctrl鍵的同時按兩下+鍵,來放大字體。也可以選擇Edit-Advanced-Increase Font Size。141

48、2.在mainwindow.h中加入#include 的頭文件包含,在private中添加QLineEdit *find_textLineEdit; /聲明一個行編輯器,用于輸入要查找的內容在private slots中添加void show_findText();在該函數中實現查找字符串的功能。1423.我們進入查找菜單的觸發(fā)事件槽函數,更改如下。void MainWindow:on_action_Find_triggered()QDialog *findDlg = new QDialog(this);/新建一個對話框,用于查找操作,this表明它的父窗口是MainWindow。findDl

49、g-setWindowTitle(tr(“查找”);/設置對話框的標題find_textLineEdit = new QLineEdit(findDlg);/將行編輯器加入到新建的查找對話框中QPushButton *find_Btn = new QPushButton(tr(“查找下一個”),findDlg);/加入一個“查找下一個”的按鈕QVBoxLayout* layout = new QVBoxLayout(findDlg);layout-addWidget(find_textLineEdit);layout-addWidget(find_Btn);/新建一個垂直布局管理器,并將行編輯

50、器和按鈕加入其中findDlg -show();/顯示對話框connect(find_Btn,SIGNAL(clicked(),this,SLOT(show_findText();/設置“查找下一個”按鈕的單擊事件和其槽函數的關聯1434.這里我們直接用代碼生成了一個對話框,其中一個行編輯器可以輸入要查找的字符,一個按鈕可以進行查找操作。我們將這兩個部件放到了一個垂直布局管理器中。然后顯示這個對話框。并設置了那個按鈕單擊事件與show_findText()函數的關聯。1445.下面我們開始寫實現查找功能的show_findText()函數。void MainWindow:show_findTe

51、xt()/“查找下一個”按鈕的槽函數QString findText = find_textLineEdit-text();/獲取行編輯器中的內容先用一個QString類的對象獲得要查找的字符。然后我們一步一步寫查找操作的語句。1456.在下一行寫下ui,然后直接按下鍵盤上的“”或“.”,因為ui是指針對象,所以自動生成“-”號,而且彈出了ui中的所有部件名稱的列表。如下圖。1467.我們用向下的方向鍵選中列表中的textEdit?;蛘呶覀兛梢韵容斎雝ext,這時能縮減列表的內容。1478.如上圖我們將鼠標放到textEdit上,這時便出現了textEdit的類名信息,且后面出現一個F1按鍵。

52、我們按下鍵盤上的F1,便能出現textEdit的幫助。1489.我們在幫助中向下拉,會發(fā)現這里有一個find函數。14910.我們點擊find,查看其詳細說明。15011.可以看到find函數可以實現文本編輯器中字符串的查找。其中有一個FindFlags的參數,我們點擊它查看其說明。15112.可以看到它是一個枚舉變量(enum),有三個選項,第一項是向后查找(即查找光標以前的內容,這里的前后是相對的說法,比如第一行已經用完了,光標在第二行時,把第一行叫做向后。),第二項是區(qū)分大小寫查找,第三項是查找全部。13.我們選用第一項,然后寫出下面的語句。ui-textEdit-find(findTe

53、xt,QTextDocument:FindBackward);152當寫完函數名和第一個“(”后,系統會自動顯示出該函數的函數原型,這樣可以使我們減少出錯。15314.這時已經能實現查找的功能了。但是我們剛才看到find的返回值類型是bool型,而且,我們也應該為查找不到字符串作出提示。if(!ui-textEdit -find(findText,QTextDocument:FindBackward)QMessageBox:warning(this,tr(“查找”),tr(“找不到 %1).arg(findText);因為查找失敗返回值是false,所以if條件加了“!”號。在找不到時彈出警告

54、對話框。15415515.到這里,查找功能就基本上寫完了。show_findText()函數的內容如下。156我們會發(fā)現隨著程序功能的增強,其中的函數也會越來越多,我們都會為查找某個函數的定義位置感到頭疼。而在Qt Creator中有幾種快速定位函數的方法,我們這里講解三種。第一,在函數聲明的地方直接跳轉到函數定義的地方。如在do_file_Load上點擊鼠標右鍵,在彈出的菜單中選擇Follow Symbol under Cursor或者下面的Switch between Method Declaration/Definition。157第二,快速查找一個文件里的所有函數。我們可以點擊窗口最上

55、面的下拉框,這里會顯示本文件中所有函數的列表。 158第三,利用查找功能。1.我們先將鼠標定位到一個函數名上。2.然后選擇Edit-Find/Replace-Find Dialog。3.這時會出現一個查找對話框,可以看到要查找的函數名已經寫在里面了。1594.當我們按下Search按鈕后,會在查找結果窗口顯示查找到的結果。1605.我們點擊第二個文件。會發(fā)現在這個文件中有兩處關鍵字是高亮顯示。 1616.我們雙擊第二項,就會自動跳轉到函數的定義處。162八、Qt Creator實現狀態(tài)欄顯示1.我們在mainwindow.h中做一下更改。加入頭文件包含: #include 加入私有變量和函數:

56、QLabel* first_statusLabel; /聲明兩個標簽對象,用于顯示狀態(tài)信息QLabel* second_statusLabel;void init_statusBar(); /初始化狀態(tài)欄加入一個槽函數聲明:void do_cursorChanged(); /獲取光標位置信息1632.在mainwindow.cpp中加入狀態(tài)欄初始化函數的定義。void MainWindow:init_statusBar()QStatusBar* bar = ui-statusBar; /獲取狀態(tài)欄first_statusLabel = new QLabel; /新建標簽first_status

57、Label-setMinimumSize(150,20); /設置標簽最小尺寸first_statusLabel-setFrameShape(QFrame:WinPanel); /設置標簽形狀first_statusLabel-setFrameShadow(QFrame:Sunken); /設置標簽陰影second_statusLabel = new QLabel;second_statusLabel-setMinimumSize(150,20);second_statusLabel-setFrameShape(QFrame:WinPanel);second_statusLabel-setFr

58、ameShadow(QFrame:Sunken);bar-addWidget(first_statusLabel);bar-addWidget(second_statusLabel);first_statusLabel-setText(tr(“歡迎使用文本編輯器”); /初始化內容second_statusLabel-setText(tr(“yafeilinux制作!”);這里將兩個標簽對象加入到了主窗口的狀態(tài)欄里,并設置了他們的外觀和初值。1643.在構造函數里調用狀態(tài)欄初始化函數。init_statusBar();這時運行程序,效果如下。1654.在mainwindow.cpp中加入獲取光

59、標位置的函數的定義。void MainWindow:do_cursorChanged()int rowNum = ui-textEdit-document()-blockCount();const QTextCursor cursor = ui-textEdit-textCursor();int colNum = cursor.columnNumber();/獲取光標所在列的列號rowNum = cursor.blockNumber();/獲取光標所在行的行號first_statusLabel-setText(tr(“%1行 %2列”).arg(rowNum).arg(colNum);/在狀態(tài)

60、欄顯示光標位置這個函數可獲取文本編輯框中光標的位置,并顯示在狀態(tài)欄中。1665.在構造函數添加光標位置改變信號的關聯。connect(ui-textEdit,SIGNAL(cursorPositionChanged(),this,SLOT(do_cursorChanged();這時運行程序。效果如下。1676.在do_file_Load函數的最后添加下面語句。second_statusLabel-setText(tr(“打開文件成功”);1687.在saveFile函數的最后添加以下語句。second_statusLabel-setText(tr(“保存文件成功”);1698.在on_acti

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論