




已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
2019/7/12,大連東軟信息學院 嵌入式系統(tǒng)導論課程組,嵌入式系統(tǒng),2019/7/12,第6章 Qt圖形界面應用程序開發(fā),6.1 Qt簡介 6.2 Qt4 Designer的應用 6.3 Qt4與數據庫 6.4 Qt/Embedded,2019/7/12,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程序結構及示例,2019/7/12,6.1.1 Qt的簡介,Qt是挪威Trolltech公司出品的一個跨平臺的C+圖形用戶界面庫。 Trolltech公司目前開發(fā)兩種產品: 一種是跨平臺的圖形界面設計平臺,即Qt。 一種是提供給嵌入式系統(tǒng)的應用程序開發(fā)平臺,可以應用到PDA,手機等手持設備上,即Qtopia,是基于FrameBuffer的Qt/Embedded。,2019/7/12,Trolltech的雙重授權模式,Trolltech公司提供兩種授權模式,一種用于商業(yè)性質的授權,一種用于免費的開源授權,2019/7/12,6.1.1 Qt的簡介,Qt 同 X Window 上的Motif,Openwin,GTK 等圖形界面庫,和Windows 平臺上的 MFC,OWL,VCL,ATL 是同類型的東西,但是 Qt 具有很多優(yōu)點。 (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的嵌入式處理器上。,2019/7/12,Qt特征(一),面向對象 Qt具有模塊設計和注重軟件構件或元素的可重用性的特點 構件支持 Qt提供信號(signal)和插槽(slot)概念,并支持對象之間在彼此不知道對方信息的情況下進行合作,這使得Qt非常適合于真正的構件編程 友好的聯機幫助 Qt提供了大量的聯機參考文檔,有超文本HTML方式,也有Unix幫助頁man手冊頁和補充說明。對于初學者,其中的指南將一步步介紹如何進行Qt編程,2019/7/12,Qt特征(二),便利性 由于Qt是一種跨平臺的GUI工具包,它對編程者隱藏了在處理不同窗口系統(tǒng)時潛在的問題,Qt定義了一些類來隱藏在不同操作系統(tǒng)上不同處理方式下的細節(jié)問題 國際化 Qt為本地化應用提供了完全的支持,所有用戶界面文本都可以基于消息翻譯表被翻譯成各國語言,Qt還支持雙字節(jié)16bit國際字符標準,2019/7/12,Qt特征(三),豐富的API函數 Qt為專業(yè)應用提供了大量的函數,在Qt的API中含有大約250個C+類,大多數的類都是GUI專有的 可用戶化外觀 Qt支持主題,基于Qt的應用程序能夠在Windows外觀、Motif外觀,以及其它一些用戶化外觀主題之間切換 完整的一套組件工具 Qt編程的基本模塊稱之為組件,組件是用戶界面的組成部分,Qt含有用來創(chuàng)建專業(yè)外觀的用戶界面所需要的所有組件,2019/7/12,6.1.2 Qt中主要的類,QObject QObject類是所有能夠處理signal、slot和事件的Qt對象的基類,原形如下: QObject:QObject ( QObject * parent =0,const char * name = 0 ) 在上面的函數中如果parent為0則構造一個無父的對象,如果對象是一個組件,則它就會成為頂層的窗口。,2019/7/12,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 calculate(); private: QTimer timer; ;,2019/7/12,QObject類(二),/構造初始化一個Mandelbrot對象 Mandelbrot:Mandelbrot(QObject *parent=0, const char *name) :QObject(parent, name) connect( ,2019/7/12,6.1.2 Qt中主要的類,2. QApplication QApplication類負責GUI應用程序的控制流和主要的設置,它包括主事件循環(huán)體,負責處理和調度所有來自窗口系統(tǒng)和其他資源的事件 處理應用程序的開始、結束以及會話管理。 對于一個應用程序來說,建立此類的對象是必不可少的 QApplication是QObject類的子類,2019/7/12,2019/7/12,6.1.2 Qt中主要的類,3. QWidget QWidget類是所有用戶接口對象(組建)的基類,它繼承了QObject類的屬性 組件是用戶界面的單元組成部分,它接收鼠標、鍵盤和其它從窗口系統(tǒng)來的事件,并把它自己繪制在屏幕上 QWidget類有很多成員函數,但一般不直接使用,而是通過子類繼承來使用其函數功能。如,QPushButton、QlistBox等都是它的子類 QWidget是QObject類的子類,2019/7/12,2019/7/12,6.1.3 信號和槽,信號和槽機制是Qt的一個主要特征,是Qt與其他工具包最不相同的部分。 在圖形用戶界面編程中,經常會出現窗口中的一個部件發(fā)生的變化會被通知給另一個部件,在Qt中采用信號和槽來實現對象部件之間的通信。,2019/7/12,Signal和Slot的聲明(一),在Qt程序設計中,凡是包含signal和slot的類中都要加上Q_OBJECT的定義,下面的例子給出了如何在一個類中定義signal和slot: class Student : public QObject Q_OBJECT public: Student() myMark = 0; int mark() const return myMark; public slots: void setMark(int newMark); signals: void markChanged(int newMark); private: int myMark; ;,2019/7/12,Signal和Slot的聲明(二),signal的發(fā)出一般在事件的處理函數中,利用emit發(fā)出signal,在下面的例子中在事件處理結束后發(fā)出signal void Student:setMark(int newMark) if (newMark!= myMark) myMark = newMark; emit markChanged(myMark); ,2019/7/12,Signal和Slot的連接(一),在signal和slot聲明以后,需要使用connect()函數將它們連接起來。connect()函數屬于QObject類的成員函數,它能夠連接signal和slot,也可以用來連接signal和signal 函數原形如下: bool connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * slot) 其中第一個和第三個參數分別指出signal和slot是屬于那個對象或組件,2019/7/12,Signal和Slot的連接(二),在使用connect()函數進行連接的時候,還需要用到SIGNAL()和SLOT()這兩個宏,使用方法如下: QLabel *label = new QLabel; QScrollBar *scroll = new QScrollBar; QObject:connect( scroll,SIGNAL(valueChanged(int), label, SLOT(setNum(int) );,2019/7/12,Signal和Slot的連接方式(一),2019/7/12,Signal和Slot的連接方式(二),同一個信號連接多個插槽 connect(slider, SIGNAL(valueChanged(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();,2019/7/12,Signal和Slot的連接方式(三),一個信號連接到另一個信號 connect(lineEdit, SIGNAL(textChanged(const QString 取消一個連接不是很常用,因為Qt會在一個對象被刪除后自動取消這個對象所包含的所有的連接,2019/7/12,6.1.4 Qt的幫助文檔,2019/7/12,6.1.5 Qt4的特點和優(yōu)勢,Qt4較以前的版本,有了較大的改進,具體特點及優(yōu)勢如下: Qt4中,所有的頭文件(.h)存放位置更規(guī)范,按照分類形式,放到QtCore,QtDBus,QtGui,QtNetwork,QtOpenGL,QtSql等子文件夾下,而不像之前的版本,所有的頭文件都放在一起。 Qt4增加了很多新的控件,但是對之前版本中的控件也有保留,只不過在命名上在類名前面加上Qt3。 Qt4中界面的設計與邏輯功能分開,界面設計的頭文件中不再包含任何用戶自己寫的代碼,邏輯功能的實現在用戶自己重新定義的類中實現,而這個重新定義的類是完成界面設計類的繼承類。當用QtDesigner修改界面布局后,只需用uic工具直接生成新的界面頭文件覆蓋原來的文件即可。,2019/7/12,6.1.6 Qt4的安裝與配置,1 解壓壓縮包 rootlocalhost home# tar zxvf qt-x11-opensource-src-4.3.2.tar.gz 2 配置并編譯 rootlocalhost home# 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,2019/7/12,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/local/Trolltech/Qt-4.3.2。如果安裝的時候需要更改安裝的路徑,可以加上-prefix 參數來指定安裝路徑。 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,2019/7/12,6.1.7 Qt4程序結構及示例,【程序6.5】helloworld.cpp文件內容。 #include #include int main(int argc, char *argv) QApplication app(argc, argv); QLabel *label = new QLabel(“Hello World!“); label-show(); return app.exec(); ,2019/7/12,編譯及運行,建立一個文件夾helloworld,把helloworld.cpp放到文件夾下 qmake project qmake make ./helloworld,2019/7/12,6.2 Qt4 Designer的應用,6.2.1 Qt Designer的應用 6.2.2 Qt中的控件及對話框類 6.2.3 基于Qt Designer程序設計流程 6.2.4 Qt應用程序實例,2019/7/12,6.2.1 Qt Designer的應用,Qt提供了非常強大的GUI編輯工具Qt Designer,它的操作界面類似于Windows下的Visual Studio,而且它還提供了相當多的部件資源。在編譯Qt源碼的時候,也同時生成了可執(zhí)行程序designer。 rootlocalhost sunjm#designer,2019/7/12,2019/7/12,6.2.2 Qt中的控件及對話框類,Qt提供了很多控件和常用的對話框,可以用在很多地方。 主窗口控件:QMenuBar,QToolBar,QStatusBar 布局相關的控件:QSplitter,QScrollArea 四種方式按鈕: QPushButton, QToolButton, QCheckBox,和 QRadioButton 容器類控件:QFrame,QToolBox,QLabel。 滾動條:QAbstractScrollArea,是視圖類和其他滾動控件的基類。 顯示信息的控件:QLabel,QTextBrowser。 數據輸入的控件:QLineEdit,QTextEdit。 QLineEdit只可輸入許可器允許的字符。 QTextEdit是QAbstractScrollArea的子類,可以輸入多行文本。 程序的進行狀態(tài)控件:QProgressDialog,QProgressBar。 QInputDialog可以方便的讓用戶輸入一行文本或者數字。 Qt中還可以自定義控件,并集成到Qt Designer中。,2019/7/12,6.2.3 基于Qt Designer程序設計流程,1.創(chuàng)建和初始化子部件 2.設置子部件布局 3.設置Tab鍵次序(不是必須) 4.建立信號與插槽的連接,2019/7/12,6.2.3 基于Qt Designer程序設計流程,1.創(chuàng)建并布置部件,2.對部件使用布局管理,4.建立信號與插槽的連接,3.設置Tab鍵次序,2019/7/12,6.2.3 基于Qt Designer程序設計流程,編輯兩個部件之間信號與插槽之間的連接方式,2019/7/12,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,2019/7/12,Qt Designer 功能框圖,2019/7/12,6.2.4 Qt應用程序實例,QT應用程序實例計算器 保存為test.ui文件,放到test文件夾下,2019/7/12,生成ui_test.h頭文件,uic o ui_test.h test.ui 具體代碼參見ui_test.h代碼,2019/7/12,編寫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 add(); void ok(); private: double num1; double num2; bool flag; ;,2019/7/12,編寫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(Button3, SIGNAL(clicked(), this, SLOT(val3(); connect(Button_add, SIGNAL(clicked(), this, SLOT(add(); connect(Button_ok, SIGNAL(clicked(), this, SLOT(ok(); ,2019/7/12,編寫main.cpp,#include #include #include“test.h“ int main(int argc, char *argv) QApplication app(argc,argv); Dialog *dialog = new Dialog; dialog-show(); return app.exec(); ,2019/7/12,編譯及執(zhí)行,cd test qmake project qmake make ./test,2019/7/12,6.3 Qt4與數據庫,6.3.1 Qt4與數據庫的連接 6.3.2 執(zhí)行SQL命令 6.3.3 SQL模型,2019/7/12,Qt4連接數據庫的原理,#include Qt4中提供了QtSql模塊。 為訪問數據庫提供了平臺和相應的接口 提供模型視圖體系,來完成可視化的信息輸入,2019/7/12,6.3.1 Qt4與數據庫的連接,Qt SQL模塊中連接并處理數據庫被分成三個層次。 第一層是數據庫的驅動程序。 第二層是數據庫的連接層。實現對數據庫的連接,對數據庫操作結果、錯誤信息的進行處理。 第三層是用戶接口層。提供了一套模型視圖體系來完成對數據庫的可視化操作。,2019/7/12,驅動程序,Qt4中為多種數據庫提供了本地驅動程序,見下表:,2019/7/12,6.3.1 Qt4與數據庫的連接 Qt4與MySQL數據庫的連接,#include 用QSqlDatabase類通過驅動程序建立起和數據庫的連接 設置hostName,databaseName,username,password等屬性 打開數據庫 操作數據庫 關閉數據庫,2019/7/12,QSqlDatabase db = 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與數據庫的連接 Qt4與MySQL數據庫的連接,2019/7/12,6.3.1 Qt4與數據庫的連接 Qt4與SQLite數據庫的連接,SQLite的驅動程序是QSQLITE。 SQLITE數據庫不是基于服務器的,不需要設置username,password等屬性,只要制定databaseName就可以了。 QSqlDatabase db = QSqlDatabase:addDatabase(“QSQLITE”); db.setDatabaseName(“testsqlite.db”); if(!db.open()) qDebug() db.lastError(); qFatal(“Failed to connect.”); ,2019/7/12,SQLite數據庫的一個優(yōu)良特性是它可以在內存中建立,操作快,省去了對磁盤的讀寫。把數據庫保留在內存中,可以通過這樣的代碼來實現: db.setDatabaseName(“:memory:”); 結束對數據庫的操作,用close方法來實現關閉數據庫。,6.3.1 Qt4與數據庫的連接,2019/7/12,6.3.2 執(zhí)行SQL命令,用QSqlQuery對象來執(zhí)行SQL命令來對數據庫操作。 QSqlQuery query; query.exec(“SELECT * FROM teacher”); exec()方法執(zhí)行之后,通過next()方法來指定結果集的第一條記錄,依次訪問后續(xù)的記錄,直到最后一條記錄,next()方法返回false。如果查詢失敗或者查詢的結果集為
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 外貿英語函電全套課件教學
- 2023-2024學年廣西桂林、北海聯考高二下學期4月期中考試語文試題(解析版)
- 探秘大雪節(jié)氣
- 塑造未來:初二學習規(guī)劃
- 碩士之路指南
- 內蒙古民族幼兒師范高等??茖W?!渡镝t(yī)學檢驗儀器》2023-2024學年第二學期期末試卷
- 天津工程職業(yè)技術學院《兒童發(fā)展教育原理》2023-2024學年第一學期期末試卷
- 山東省煙臺市重點名校2025屆普通高中質量檢測試題(二)物理試題含解析
- 三門峽市澠池縣2025屆四年級數學第二學期期末調研模擬試題含解析
- 山西工商學院《介入放射基礎》2023-2024學年第一學期期末試卷
- 污水處理站運營應急預案
- 中醫(yī)治療面癱課件
- 電商平臺對用戶交易糾紛的處理和解決方案
- 項目式學習在初中散文教學中的應用研究
- 腦動靜脈畸形演示課件
- 環(huán)泊酚注射液-臨床用藥解讀
- 社交禮儀與合作精神的主題班會
- 智慧社區(qū)平臺運營方案
- 民間非營利組織會計培訓
- 不良資產項目律師法律盡調報告(模板)
- 產品借用申請表
評論
0/150
提交評論