版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、2020/7/30,大連東軟信息學院 嵌入式系統(tǒng)導論課程組,嵌入式系統(tǒng),2020/7/30,第6章 Qt圖形界面應用程序開發(fā),6.1 Qt簡介 6.2 Qt4 Designer的應用 6.3 Qt4與數(shù)據(jù)庫 6.4 Qt/Embedded,2020/7/30,6.1 Qt簡介,6.1.1 Qt的介紹 6.1.2 Qt中主要的類 6.1.3 信號和槽 6.1.4 Qt的幫助文檔 6.1.5 Qt4的特點和優(yōu)勢 6.1.6 Qt4的安裝與配置 6.1.7 Qt4程序結構及示例,2020/7/30,6.1.1 Qt的簡介,Qt是挪威Trolltech公司出品的一個跨平臺的C+圖形用戶界面庫。 Tro
2、lltech公司目前開發(fā)兩種產(chǎn)品: 一種是跨平臺的圖形界面設計平臺,即Qt。 一種是提供給嵌入式系統(tǒng)的應用程序開發(fā)平臺,可以應用到PDA,手機等手持設備上,即Qtopia,是基于FrameBuffer的Qt/Embedded。,2020/7/30,Trolltech的雙重授權模式,Trolltech公司提供兩種授權模式,一種用于商業(yè)性質(zhì)的授權,一種用于免費的開源授權,2020/7/30,6.1.1 Qt的簡介,Qt 同 X Window 上的Motif,Openwin,GTK 等圖形界面庫,和Windows 平臺上的 MFC,OWL,VCL,ATL 是同類型的東西,但是 Qt 具有很多優(yōu)點。
3、(1)Qt有優(yōu)良的跨平臺性,可支持的操作系統(tǒng)有。 (2)Unix、Linux、Solaris、SunOS等X11平臺; (3)Windows 95、Windows 98、WindowsNT 4.0、Windows 2000、Windows XP; (4)Mac OSX、HP-UX、QNX、FressBSD等; (5)MIPS、ARM、StrongARM、Motorola 68000、PowerPC和XScale等支持FrameBuffer的嵌入式處理器上。,2020/7/30,Qt特征(一),面向?qū)ο?Qt具有模塊設計和注重軟件構件或元素的可重用性的特點 構件支持 Qt提供信號(signal)
4、和插槽(slot)概念,并支持對象之間在彼此不知道對方信息的情況下進行合作,這使得Qt非常適合于真正的構件編程 友好的聯(lián)機幫助 Qt提供了大量的聯(lián)機參考文檔,有超文本HTML方式,也有Unix幫助頁man手冊頁和補充說明。對于初學者,其中的指南將一步步介紹如何進行Qt編程,2020/7/30,Qt特征(二),便利性 由于Qt是一種跨平臺的GUI工具包,它對編程者隱藏了在處理不同窗口系統(tǒng)時潛在的問題,Qt定義了一些類來隱藏在不同操作系統(tǒng)上不同處理方式下的細節(jié)問題 國際化 Qt為本地化應用提供了完全的支持,所有用戶界面文本都可以基于消息翻譯表被翻譯成各國語言,Qt還支持雙字節(jié)16bit國際字符標準
5、,2020/7/30,Qt特征(三),豐富的API函數(shù) Qt為專業(yè)應用提供了大量的函數(shù),在Qt的API中含有大約250個C+類,大多數(shù)的類都是GUI專有的 可用戶化外觀 Qt支持主題,基于Qt的應用程序能夠在Windows外觀、Motif外觀,以及其它一些用戶化外觀主題之間切換 完整的一套組件工具 Qt編程的基本模塊稱之為組件,組件是用戶界面的組成部分,Qt含有用來創(chuàng)建專業(yè)外觀的用戶界面所需要的所有組件,2020/7/30,6.1.2 Qt中主要的類,QObject QObject類是所有能夠處理signal、slot和事件的Qt對象的基類,原形如下: QObject:QObject ( QO
6、bject*parent =0,constchar*name = 0 ) 在上面的函數(shù)中如果parent為0則構造一個無父的對象,如果對象是一個組件,則它就會成為頂層的窗口。,2020/7/30,QObject類(一),class Mandelbrot:public QObject Q_OBJECT /需要使用signal和slot public: Mandelbrot(QObect *parent=0, const char *name); public slots: void start(); signals: void done(); private slots: void calcul
7、ate(); private: QTimer timer; ;,2020/7/30,QObject類(二),/構造初始化一個Mandelbrot對象 Mandelbrot:Mandelbrot(QObject *parent=0, const char *name) :QObject(parent, name) connect( ,2020/7/30,6.1.2 Qt中主要的類,2. QApplication QApplication類負責GUI應用程序的控制流和主要的設置,它包括主事件循環(huán)體,負責處理和調(diào)度所有來自窗口系統(tǒng)和其他資源的事件 處理應用程序的開始、結束以及會話管理。 對于一個應用
8、程序來說,建立此類的對象是必不可少的 QApplication是QObject類的子類,2020/7/30,2020/7/30,6.1.2 Qt中主要的類,3. QWidget QWidget類是所有用戶接口對象(組建)的基類,它繼承了QObject類的屬性 組件是用戶界面的單元組成部分,它接收鼠標、鍵盤和其它從窗口系統(tǒng)來的事件,并把它自己繪制在屏幕上 QWidget類有很多成員函數(shù),但一般不直接使用,而是通過子類繼承來使用其函數(shù)功能。如,QPushButton、QlistBox等都是它的子類 QWidget是QObject類的子類,2020/7/30,2020/7/30,6.1.3 信號和槽
9、,信號和槽機制是Qt的一個主要特征,是Qt與其他工具包最不相同的部分。 在圖形用戶界面編程中,經(jīng)常會出現(xiàn)窗口中的一個部件發(fā)生的變化會被通知給另一個部件,在Qt中采用信號和槽來實現(xiàn)對象部件之間的通信。,2020/7/30,Signal和Slot的聲明(一),在Qt程序設計中,凡是包含signal和slot的類中都要加上Q_OBJECT的定義,下面的例子給出了如何在一個類中定義signal和slot: class Student : public QObject Q_OBJECT public: Student() myMark = 0; int mark() const return myMar
10、k; public slots: void setMark(int newMark); signals: void markChanged(int newMark); private: int myMark; ;,2020/7/30,Signal和Slot的聲明(二),signal的發(fā)出一般在事件的處理函數(shù)中,利用emit發(fā)出signal,在下面的例子中在事件處理結束后發(fā)出signal void Student:setMark(int newMark) if (newMark!= myMark) myMark = newMark; emit markChanged(myMark); ,2020
11、/7/30,Signal和Slot的連接(一),在signal和slot聲明以后,需要使用connect()函數(shù)將它們連接起來。connect()函數(shù)屬于QObject類的成員函數(shù),它能夠連接signal和slot,也可以用來連接signal和signal 函數(shù)原形如下: bool connect ( constQObject*sender, constchar*signal, const QObject * receiver, const char * slot) 其中第一個和第三個參數(shù)分別指出signal和slot是屬于那個對象或組件,2020/7/30,Signal和Slot的連接(二)
12、,在使用connect()函數(shù)進行連接的時候,還需要用到SIGNAL()和SLOT()這兩個宏,使用方法如下: QLabel *label = new QLabel; QScrollBar *scroll = new QScrollBar; QObject:connect( scroll,SIGNAL(valueChanged(int), label, SLOT(setNum(int) );,2020/7/30,Signal和Slot的連接方式(一),2020/7/30,Signal和Slot的連接方式(二),同一個信號連接多個插槽 connect(slider, SIGNAL(valueCh
13、anged(int),spinBox, SLOT(setValue(int); connect(slider,SIGNAL(valueChanged(int),this, SLOT(updateStatusBarIndicator(int); 多個信號連接到同一個插槽 connect(lcd, SIGNAL(overflow(),this, SLOT(handleMathError(); connect(calculator, SIGNAL(divisionByZero(),this, SLOT(handleMathError();,2020/7/30,Signal和Slot的連接方式(三),
14、一個信號連接到另一個信號 connect(lineEdit, SIGNAL(textChanged(const QString 取消一個連接不是很常用,因為Qt會在一個對象被刪除后自動取消這個對象所包含的所有的連接,2020/7/30,6.1.4 Qt的幫助文檔,2020/7/30,6.1.5 Qt4的特點和優(yōu)勢,Qt4較以前的版本,有了較大的改進,具體特點及優(yōu)勢如下: Qt4中,所有的頭文件(.h)存放位置更規(guī)范,按照分類形式,放到QtCore,QtDBus,QtGui,QtNetwork,QtOpenGL,QtSql等子文件夾下,而不像之前的版本,所有的頭文件都放在一起。 Qt4增加了很多
15、新的控件,但是對之前版本中的控件也有保留,只不過在命名上在類名前面加上Qt3。 Qt4中界面的設計與邏輯功能分開,界面設計的頭文件中不再包含任何用戶自己寫的代碼,邏輯功能的實現(xiàn)在用戶自己重新定義的類中實現(xiàn),而這個重新定義的類是完成界面設計類的繼承類。當用QtDesigner修改界面布局后,只需用uic工具直接生成新的界面頭文件覆蓋原來的文件即可。,2020/7/30,6.1.6 Qt4的安裝與配置,1 解壓壓縮包 rootlocalhost home# tar zxvf qt-x11-opensource-src-4.3.2.tar.gz 2 配置并編譯 rootlocalhost home#
16、 cd qt-x11-opensource-src-4.3.2 rootlocalhost qt-x11-opensource-src-4.3.2#./configure -no-openssl rootlocalhost qt-x11-opensource-src-4.3.2#gmake,2020/7/30,6.1.6 Qt4的安裝與配置,3安裝庫文件 rootlocalhost qt-x11-opensource-src-4.3.2#su rootlocalhost qt-x11-opensource-src-4.3.2#gmake install Qt默認被安裝的路徑為:/usr/loc
17、al/Trolltech/Qt-4.3.2。如果安裝的時候需要更改安裝的路徑,可以加上-prefix 參數(shù)來指定安裝路徑。 4設置環(huán)境變量 如果需要直接用Qt命令,那么需要設置環(huán)境變量PATH。具體操作為,如果你的shell是bash,ksh,zsh或sh,那么在.profile或.bash_profile文件中加上下面的信息。 PATH=/usr/local/Trolltech/Qt-4.3.2/bin:$PATH export PATH,2020/7/30,6.1.7 Qt4程序結構及示例,【程序6.5】helloworld.cpp文件內(nèi)容。 #include #include int m
18、ain(int argc, char *argv) QApplication app(argc, argv); QLabel *label = new QLabel(Hello World!); label-show(); return app.exec(); ,2020/7/30,編譯及運行,建立一個文件夾helloworld,把helloworld.cpp放到文件夾下 qmake project qmake make ./helloworld,2020/7/30,6.2 Qt4 Designer的應用,6.2.1 Qt Designer的應用 6.2.2 Qt中的控件及對話框類 6.2.3
19、 基于Qt Designer程序設計流程 6.2.4 Qt應用程序?qū)嵗?2020/7/30,6.2.1 Qt Designer的應用,Qt提供了非常強大的GUI編輯工具Qt Designer,它的操作界面類似于Windows下的Visual Studio,而且它還提供了相當多的部件資源。在編譯Qt源碼的時候,也同時生成了可執(zhí)行程序designer。 rootlocalhost sunjm#designer,2020/7/30,2020/7/30,6.2.2 Qt中的控件及對話框類,Qt提供了很多控件和常用的對話框,可以用在很多地方。 主窗口控件:QMenuBar,QToolBar,QStatu
20、sBar 布局相關的控件:QSplitter,QScrollArea 四種方式按鈕: QPushButton, QToolButton, QCheckBox,和 QRadioButton 容器類控件:QFrame,QToolBox,QLabel。 滾動條:QAbstractScrollArea,是視圖類和其他滾動控件的基類。 顯示信息的控件:QLabel,QTextBrowser。 數(shù)據(jù)輸入的控件:QLineEdit,QTextEdit。 QLineEdit只可輸入許可器允許的字符。 QTextEdit是QAbstractScrollArea的子類,可以輸入多行文本。 程序的進行狀態(tài)控件:QP
21、rogressDialog,QProgressBar。 QInputDialog可以方便的讓用戶輸入一行文本或者數(shù)字。 Qt中還可以自定義控件,并集成到Qt Designer中。,2020/7/30,6.2.3 基于Qt Designer程序設計流程,1.創(chuàng)建和初始化子部件 2.設置子部件布局 3.設置Tab鍵次序(不是必須) 4.建立信號與插槽的連接,2020/7/30,6.2.3 基于Qt Designer程序設計流程,1.創(chuàng)建并布置部件,2.對部件使用布局管理,4.建立信號與插槽的連接,3.設置Tab鍵次序,2020/7/30,6.2.3 基于Qt Designer程序設計流程,編輯兩個
22、部件之間信號與插槽之間的連接方式,2020/7/30,6.2.3 基于Qt Designer程序設計流程,Qt4 Designer將工程文件組織成.ui的文件 以使用Qt Designer為例 通過designer設計并保存工程為*.ui文件 由.ui文件生成ui_* .h文件 2.手工編寫一個main.cpp文件 3.手工編寫*.cpp和*.h文件。 4.使用qmake工具生成.pro工程文件 qmake -project 5.生成makefile文件 qmake 6.編譯 make,2020/7/30,Qt Designer 功能框圖,2020/7/30,6.2.4 Qt應用程序?qū)嵗?QT
23、應用程序?qū)嵗嬎闫?保存為test.ui文件,放到test文件夾下,2020/7/30,生成ui_test.h頭文件,uic o ui_test.h test.ui 具體代碼參見ui_test.h代碼,2020/7/30,編寫test.h文件,#include #include ui_test.h class Dialog : public QDialog,public Ui:Dialog Q_OBJECT public: Dialog(QDialog *parent=0); private slots: void val1(); void val2(); void val3(); void
24、add(); void ok(); private: double num1; double num2; bool flag; ;,2020/7/30,編寫test.cpp文件,#include #include test.h Dialog:Dialog(QDialog *parent) setupUi(this); num1=0; num2=0; flag=0; connect(Button1, SIGNAL(clicked(), this, SLOT(val1(); connect(Button2, SIGNAL(clicked(), this, SLOT(val2(); connect(
25、Button3, SIGNAL(clicked(), this, SLOT(val3(); connect(Button_add, SIGNAL(clicked(), this, SLOT(add(); connect(Button_ok, SIGNAL(clicked(), this, SLOT(ok(); ,2020/7/30,編寫main.cpp,#include #include #includetest.h int main(int argc, char *argv) QApplication app(argc,argv); Dialog *dialog = new Dialog;
26、dialog-show(); return app.exec(); ,2020/7/30,編譯及執(zhí)行,cd test qmake project qmake make ./test,2020/7/30,6.3 Qt4與數(shù)據(jù)庫,6.3.1 Qt4與數(shù)據(jù)庫的連接 6.3.2 執(zhí)行SQL命令 6.3.3 SQL模型,2020/7/30,Qt4連接數(shù)據(jù)庫的原理,#include Qt4中提供了QtSql模塊。 為訪問數(shù)據(jù)庫提供了平臺和相應的接口 提供模型視圖體系,來完成可視化的信息輸入,2020/7/30,6.3.1 Qt4與數(shù)據(jù)庫的連接,Qt SQL模塊中連接并處理數(shù)據(jù)庫被分成三個層次。 第一層是數(shù)
27、據(jù)庫的驅(qū)動程序。 第二層是數(shù)據(jù)庫的連接層。實現(xiàn)對數(shù)據(jù)庫的連接,對數(shù)據(jù)庫操作結果、錯誤信息的進行處理。 第三層是用戶接口層。提供了一套模型視圖體系來完成對數(shù)據(jù)庫的可視化操作。,2020/7/30,驅(qū)動程序,Qt4中為多種數(shù)據(jù)庫提供了本地驅(qū)動程序,見下表:,2020/7/30,6.3.1 Qt4與數(shù)據(jù)庫的連接Qt4與MySQL數(shù)據(jù)庫的連接,#include 用QSqlDatabase類通過驅(qū)動程序建立起和數(shù)據(jù)庫的連接 設置hostName,databaseName,username,password等屬性 打開數(shù)據(jù)庫 操作數(shù)據(jù)庫 關閉數(shù)據(jù)庫,2020/7/30,QSqlDatabase db =
28、QSqlDatabase:addDatabase(“QMYSQL”); db.setHostName(“l(fā)ocalhsot”); db.setDatabaseName(“testmysql.db”); db.setUserName(“user”); db.setPassword(“password”); if(!db.open()) qDebug() db.lastError(); qFatal(“Failed to connect.”); ,6.3.1 Qt4與數(shù)據(jù)庫的連接Qt4與MySQL數(shù)據(jù)庫的連接,2020/7/30,6.3.1 Qt4與數(shù)據(jù)庫的連接Qt4與SQLite數(shù)據(jù)庫的連接,S
29、QLite的驅(qū)動程序是QSQLITE。 SQLITE數(shù)據(jù)庫不是基于服務器的,不需要設置username,password等屬性,只要制定databaseName就可以了。 QSqlDatabase db = QSqlDatabase:addDatabase(“QSQLITE”); db.setDatabaseName(“testsqlite.db”); if(!db.open()) qDebug() db.lastError(); qFatal(“Failed to connect.”); ,2020/7/30,SQLite數(shù)據(jù)庫的一個優(yōu)良特性是它可以在內(nèi)存中建立,操作快,省去了對磁盤的讀寫。把數(shù)據(jù)庫保留在內(nèi)存中,可以通過這樣的代碼來實現(xiàn): db.setDatabaseName(“:memory:”); 結束對數(shù)據(jù)庫的操作,用close方法來實現(xiàn)關閉數(shù)據(jù)庫。,6.3.1 Qt4與數(shù)據(jù)庫的連接,2020/7/30,6.3.2 執(zhí)行SQL命令,用QSqlQuery對象來執(zhí)行SQL命令來對數(shù)據(jù)庫操作。 QSqlQuery query; query.exec(“SELECT * FROM teacher”); exec()方法執(zhí)行之后,通過next()方法來指定結果集的第一條記錄,依次訪問后續(xù)的記錄,直到最后一條記錄,next()方法返回false。如果查詢失敗或者查詢的結果集為空,那
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課件呈現(xiàn)板書的必要性
- 面試考試題及答案
- 綿陽中考數(shù)學試卷及答案
- 旅游學題庫及答案
- 論文答辯題目及答案
- 吉林省四平市伊通縣2025-2026學年八年級上學期期中語文試題(無答案)
- 《分子熱運動》教案物理科課件
- 六年級數(shù)學畢業(yè)考試卷及答案
- 春季安全培訓計劃課件
- 選煤廠安全規(guī)程解讀課件
- DB11∕T 695-2025 建筑工程資料管理規(guī)程
- 未成年人網(wǎng)絡保護的法律體系構建與權益保障研究畢業(yè)答辯
- 醫(yī)院廣告標識制作設計方案投標方案(技術標)
- 新型城市基礎設施建設數(shù)字化轉(zhuǎn)型策略研究
- DB54∕T 0359-2024 雅江雪牛育肥期飼養(yǎng)管理技術規(guī)程
- 貴州省貴陽市2023-2024學年高一上學期期末考試語文試卷(含答案)
- 電氣類儀器儀表使用
- 9.2奉獻社會我踐行課件-2025-2026學年統(tǒng)編版 道德與法治 八年級上冊
- 煙花爆竹零售店安全生產(chǎn)責任制
- 2025江蘇蘇州市昆山鈔票紙業(yè)有限公司招聘10人筆試歷年參考題庫附帶答案詳解
- 商業(yè)中庭防墜網(wǎng)施工方案
評論
0/150
提交評論