《Qt程序設計基礎》PPT課件.ppt

上傳人:za****8 文檔編號:14489514 上傳時間:2020-07-21 格式:PPT 頁數(shù):54 大小:704.01KB
收藏 版權申訴 舉報 下載
《Qt程序設計基礎》PPT課件.ppt_第1頁
第1頁 / 共54頁
《Qt程序設計基礎》PPT課件.ppt_第2頁
第2頁 / 共54頁
《Qt程序設計基礎》PPT課件.ppt_第3頁
第3頁 / 共54頁

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《Qt程序設計基礎》PPT課件.ppt》由會員分享,可在線閱讀,更多相關《《Qt程序設計基礎》PPT課件.ppt(54頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、Qt程序開發(fā)入門,北京博創(chuàng)興業(yè)科技有限公司,2,第一部分:,Qt基礎程序設計基礎,博創(chuàng)科技 張笑天 zhangxt_,3,Qt簡介,Qt是Trolltech公司的標志性產(chǎn)品,是一個跨平臺的C++圖形用戶界面(GUI)工具包 Qt 應用程序接口與工具兼容于所有支持平臺,讓開發(fā)員們掌握一個應用程序接口,便可執(zhí)行與平臺非相關的應用開發(fā)與配置 Qt/Windows(Windows XP, 2000, NT 4, Me/98) Qt/Mac(Mac OS X) Qt/X11(Linux, Solaris, HP-UX, IRIX, AIX等) Qt對不同平臺的專門API進行了 專門的封裝(文件處理,網(wǎng)

2、絡等),4,Trolltech的雙重授權模式,Trolltech公司提供兩種授權模式,一種用于商業(yè)性質(zhì)的授權,一種用于免費的開源授權,5,Qt特征(一),面向?qū)ο?Qt具有模塊設計和注重軟件構件或元素的可重用行的特點 構件支持 Qt提供信號(signal)和插槽(slot)概念,這是一種類型安全的方法,它允許回調(diào),并支持對象之間在彼此不知道對方信息的情況下進行合作,這使得Qt非常適合于真正的構件編程 友好的聯(lián)機幫助 Qt提供了大量的聯(lián)機參考文檔,有超文本HTML方式,也有Unix幫助頁man手冊頁和補充說明。并且對于初學者,其中的指南將一步步介紹如何進行Qt編程,6,Qt特征(二),便利性 由

3、于Qt是一種跨平臺的GUI工具包,它對編程者隱藏了在處理不同窗口系統(tǒng)時潛在的問題,Qt定義了一些類來隱藏在不同操作系統(tǒng)上不同處理方式下的細節(jié)問題 用戶自定義 使用其他的一些工具包經(jīng)常會遇到這樣一種情況,沒有真正適合需求的組件,聲稱自定義的組件對用戶來說就像一個黑匣子。而在Qt中生成用戶自定義的組件非常簡單,而且易于修改組件的行為 國際化 Qt為本地化應用提供了完全的支持,所有用戶界面文本都可以基于消息翻譯表被翻譯成各國語言,Qt還支持雙字節(jié)16bit國際字符標準,7,Qt特征(三),豐富的API函數(shù) Qt為專業(yè)應用提供了大量的函數(shù),在Qt的API中含有大約250個C++類,大多數(shù)的類都是GUI

4、專有的 可用戶化外觀 Qt支持主題,基于Qt的應用程序能夠在Windows外觀、Motif外觀,以及其它一些用戶化外觀主題之間切換 完整的一套組件工具 Qt編程的基本模塊稱之為組件,組件是用戶界面的組成部分,Qt含有用來創(chuàng)建專業(yè)外觀的用戶界面所需要的所有組件,8,Qt編程特點,初始化 在Qt應用程序中,首先要創(chuàng)建一個QApplication對象,QApplication類負責圖形用戶界面應用程序的控制流和主設置,在main.cpp中定義如下: int main(int argc, char **argv) QApplication a(argc, argv); ,9,1.初始化,QApplic

5、ation包含在main()函數(shù)的事件循環(huán)體中,對所有來自Window系統(tǒng)和其它源文件的事件進行處理和調(diào)度,還包括處理應用程序的初始化和結束,并且提供會話管理。 在Qt應用程序中,不管有多少個窗口,QApplication對象只能有一個,而且必須在其他對象之前創(chuàng)建。 QApplication類中封裝了很多函數(shù),其中包括: 系統(tǒng)設置:setFont() 用來設置字體 事件處理:sendEvent() 用來發(fā)送事件 GUI風格:setStyles() 設置圖形用戶界面的風格 顏色使用:colorSpec() 用來返回顏色文件 文本處理:translate() 用來處理文本信息 創(chuàng)建

6、組件:setmainWidget() 用來設置窗口的主組件 ,10,2.窗口的創(chuàng)建,在Qt程序中,創(chuàng)建窗口比較簡單,只要在main.cpp文件中為ApplicationWindow建立一個指針: ApplicationWindow *mw = new ApplicatonWindow(); ApplicationWindow是在Application.h中定義的類,它是一個QmainWindow的繼承類 組件的創(chuàng)建需要調(diào)用相應組件的類,并在頭文件中包含此類的頭文件或者創(chuàng)建自定義類,繼承以后組件類的功能 #include “qpushbutton.h”,3.組件的創(chuàng)建,11,3.組件的創(chuàng)建,c

7、lass hello::public Qwidget hello類繼承了Qwidget類的特征,并加入了自定義的特征功能,同樣需要在頭文件中包含此類的頭文件 在main.cpp的函數(shù)中需要創(chuàng)建hello類的實例,或創(chuàng)建QPushButton類的實例,才可以使用 hello h(string); QPushButton hello(“Hello,world!”,0); 如果組件本身可以作為主窗口,則無需設置主窗口。在上例中,下壓按鈕創(chuàng)建時其構造函數(shù)中的第二個參數(shù)為0,表示按鈕所在窗口為主窗口,不需要設置主窗口。否則需要調(diào)用QWidget成員函數(shù)setMainWidget()來進行設置,12,3

8、.組件的創(chuàng)建,h.setMainWidget( 在X程序中,敲擊鍵盤,鼠標指針在窗口中的移動或鼠標按鍵動作等,都是事件 在Xt中提供了提供了一種叫做回調(diào)的事件處理方式。它通過翻譯表,將事件映射為相應的動作,當組件得到事件通知,就去表中找出相應的動作例程進行處理。這種機制需要應用程序注冊有關組件的回調(diào)函數(shù)或普通的事件處理函數(shù),以分發(fā)循環(huán)Xt的事件,4.事件,13,,Qt事件的處理過程:QApplication的事件循環(huán)體從事件隊列中拾取本地窗口系統(tǒng)事件或其他事件,譯成QEvent(),并送給QObject::event(),最后送給QWidget::event()本別對事件處理,4.事件,14,

9、4.事件,其實在Qt程序中,事件處理的方式也是回調(diào),但與以往所不同的是,事件的發(fā)出和接收采用了信號(signal)和插槽(slot)機制,無須調(diào)用翻譯表。利用信號和插槽進行對象間的通信是Qt的最主要特征之一 當對象狀態(tài)發(fā)生改變的時候,發(fā)出signal通知所有的slot接收signal,盡管它并不知道哪些函數(shù)定義了slot,而slot也同樣不知道要接收怎樣的signal signal和slot機制真正實現(xiàn)了封裝的概念,slot除了接收signal之外和其它的成員函數(shù)沒有什么不同,而且signal和slot之間也不是一一對應的。,15,Signal和Slot的聲明(一),在Qt程序設計中,凡是包含

10、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; ;,16,Signal和Slot的聲明(二),

11、signal的發(fā)出一般在事件的處理函數(shù)中,利用emit發(fā)出signal,在下面的例子中在在事件處理結束后發(fā)出signal void Student::setMark(int newMark) if (newMark!= myMark) myMark = newMark; emit markChanged(myMark); ,17,Signal和Slot的連接(一),在signal和slot聲明以后,需要使用connect()函數(shù)將它們連接起來。connect()函數(shù)屬于QObject類的成員函數(shù),它能夠連接signal和slot,也可以用來連接signal和signal 函數(shù)

12、原形如下: bool connect ( constQObject*sender, constchar*signal, constchar*member ) const 其中第一個和第三個參數(shù)分別指出signal和slot是屬于那個對象或組件,18,Signal和Slot的連接(二),在使用connect()函數(shù)進行來接的時候,還需要用到SIGNAL()和SLOT()這兩個宏,使用方法如下: QLabel *label = new QLabel; QScrollBar *scroll = new QScrollBar; QObject::connect( scroll,SIGNAL(value

13、Changed(int)), label, SLOT(setNum(int)) );,19,Signal和Slot的連接方式(一),20,Signal和Slot的連接方式(二),同一個信號連接多個插槽 connect(slider, SIGNAL(valueChanged(int)),spinBox, SLOT(setValue(int))); connect(slider,SIGNAL(valueChanged(int)),this, SLOT(updateStatusBarIndicator(int))); 多個信號連接到同一個插槽 connect(lcd, SIGNAL(overflow

14、()),this, SLOT(handleMathError())); connect(calculator, SIGNAL(divisionByZero()),this, SLOT(handleMathError()));,21,Signal和Slot的連接方式(三),一個信號連接到另一個信號 connect(lineEdit, SIGNAL(textChanged(const QString 取消一個連接不是很常用,因為Qt會在一個對象被刪除后自動取消這個對象所包含的所有的連接,22,退出事件程序,退出事件程序,只需要在程序結束時返回一個exec(),例如: return a.exec()

15、; 其中a為QApplication的實例,當調(diào)用exec()將進入主事件的循環(huán)中,直到exit()被調(diào)用或主窗口部件被銷毀,23,整個Qt應用程序的執(zhí)行過程,24,3個主要的基類,QObject QObject類是所有能夠處理signal、slot和事件的Qt對象的基類,原形如下: QObject::QObject ( QObject*parent =0,constchar*name = 0 ) 創(chuàng)建帶有父對象及其名字的對象,對象的父對象可以看作為這個對象的所有者。比如,對話框是其中的ok和cancel按鈕的父對象。 在上面的函數(shù)中如果parent為0則構造一個無父的對象,如果對象是一個組件

16、,則它就會成為頂層的敞口。,25,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; ;,26,QObject類(二),//構造初始化一個Mandelbrot對象 Mandelbro

17、t::Mandelbrot(QObject *parent=0, const char *name) :QObject(parent, name) connect( ,27,3個主要的基類,2. QApplication QApplication類負責GUI應用程序的控制流和主要的設置,它包括主事件循環(huán)體,負責處理和調(diào)度所有來自窗口系統(tǒng)和其他資源的事件,并且處理應用程序的開始、結束以及會話管理,還包括系統(tǒng)和應用程序方面的設置。對于一個應用程序來說,建立此類的對象是必不可少的 QApplication和QWidget都是QObject類的子類,28,,29,3個主要的基類,3. QWidget

18、QWidget類是所有用戶接口對象的基類,它繼承了QObject類的屬性。組件是用戶界面的單元組成部分,它接收鼠標、鍵盤和其它從窗口系統(tǒng)來的事件,并把它自己繪制在盤屏幕上 QWidget類有很多成員函數(shù),但一般不直接使用,而是通過子類繼承來使用其函數(shù)功能。如,QPushButton、QlistBox等都是它的子類,30,,31,一個完整的Qt程序,1 #include 2 #include 3 int main(int argc, char **argv) 4 5 QApplication app (argc, argv); 6 QLabel *hello = new QLabel(He

19、llo Qt/Embedded!, 0); 7 app.setMainWidget(hello); 8 hello-show(); 9 return app.exec(); 10 ,32,第二部分:,Qt Designer,33,Qt Designer,Qt應用程序除了使用手工編寫代碼的方式外,還可以用過Qt Desinger來完成,Qt Designer的功能十分強大,界面類似于我們常用的VB,而且還提供了大量可供編程使用的組件,34,,,35,基于Qt Designer程序設計(一),在使用Qt Designer程序開發(fā)時,一般要涉及到下面幾個步驟: 1.創(chuàng)建和初始化子部件 2.設置

20、子部件布局 3.設置Tab鍵次序(不是必須) 4.建立信號與插槽的連接,36,基于Qt Designer程序設計(二),1.創(chuàng)建并布置部件,2.對部件使用布局管理,3.建立信號與插槽的連接,37,基于Qt Designer程序設計(三),,編輯兩個部件之間信號與插槽之間的連接方式,38,基于Qt Designer程序設計(四),Qt Designer下不同風格的預覽,39,Qt Designer的工作過程,Qt Designer將工程文件組織成.ui的文件 由.ui文件生成.cpp 和 .h文件 .ui -----xml uic 生成moc_filenaem.cpp moc,40,Qt Des

21、igner 功能框圖,,41,子類繼承方式(Qt 2.X),,42,第三部分:,Qt 開發(fā)環(huán)境的建立,43,建立Qt/Embedded開發(fā)環(huán)境(一),在我們嵌入式開發(fā)中Qt提供了使用在小型嵌入式設備上的輕量級的工具包Qt/Embedded(Qt/E),要使用Qt/E需要和Qt/X11以及tmake工具進行配合,我們可以在Trolltech公司的ftp站點下載到這些工具包的源代碼ftp:// 這里列出這些工具包的一個可用的組合 Qt/Embedded 2.3.10 Qt 2.3.2 for X11 tmake 1.13,44,建立Qt/Embedded開發(fā)環(huán)境(二),解壓縮并設置環(huán)境變量 安裝t

22、make cd /pxa270Qt tar xzf tmake-1.13.tar.gz export TMAKEDIR=$PWD/tmake-1.13 安裝Qt 2.3.2 cd /pxa270Qt tar xzf qt-x11-2.3.2.tar.gz export QT2DIR=$PWD/qt-2.3.2 安裝Qt/E 2.3.10 cd /pxa270Qt tar xzf qt-embedded-2.3.10-free.tar.gz export QTEDIR=$PWD/qt-2.3.10,45,建立Qt/Embedded開發(fā)環(huán)境(三),編譯Qt/Embedded庫的時候需要注意,我們通

23、常是要將庫源碼編譯兩次。一次是為了使我們的程序能夠在pc機上顯示出來而編譯的為pc機上的程序使用的Qt/E庫;另一次是編譯在開發(fā)板上使用的庫,是為開發(fā)板上的應用程序準備的庫文件 以編譯pc機上的Qt/E庫為例,編譯Qt/E的過程主要分為三步,分別是編譯Qt 2.3.2 ,編譯qvfb,編譯Qt/Embedded 2.3.10,46,建立Qt/Embedded開發(fā)環(huán)境(四),編譯Qt 2.3.2 cd $QT2DIR export TMAKEPATH=$TMAKEDIR/lib/linux-g++ export QTDIR=$QT2DIR export PATH=$QTDIR/bin:$PATH

24、 export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH ./configure -no-xft make mkdir $QTEDIR/bin cp bin/uic $QTEDIR/bin/,47,建立Qt/Embedded開發(fā)環(huán)境(五),編譯qvfb export TMAKEPATH=$TMAKEDIR/lib/linux-g++ export QTDIR=$QT2DIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH cd $QTED

25、IR/tools/qvfb tmake -o Makefile qvfb.pro make mv qvfb $QTEDIR/bin/,48,建立Qt/Embedded開發(fā)環(huán)境(六),編譯Qt/E 2.3.10 cd $QTEDIR export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++ export QTDIR=$QTEDIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH ./configure -no-xft -qvfb -depths

26、4,8,16,32 make,49,建立Qt/Embedded開發(fā)環(huán)境(六),在qvfb上顯示Qt程序 cd $QTEDIR/examples/launcher export QTDIR=$QTEDIR export PATH=$QTEDIR/bin:$PATH export LD_LIBRARY_PATH=$QTEDIR/lib:$QT2DIR/lib:$LD_LIBRARY_PATH qvfb -width 640 -height 480 & sleep 10 ./launcher -qws,50,建立Qt/Embedded開發(fā)環(huán)境(六),編譯在開發(fā)板上運行的Qt/E庫 cd $QTEDI

27、R export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++ export QTDIR=$QTEDIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH ./configure -xplatform linux-arm-g++ -no-xft -no-qvfb -depths 4,8,16,32 make,51,第四部分:,Qt 程序開發(fā)流程,52,一個完整的Qt程序開發(fā)過程(一),以使用Qt Designer為例 1. 通過designer設計

28、并保存工程為.ui文件 2.手工編寫一個main.cpp文件 3.使用progen工具生成.pro工程文件 progen t app.t o filename.pro,53,一個完整的Qt程序開發(fā)過程(二),4. 指定tmake路徑 本機編譯 TMAKEPATH=/tmake的安裝路徑(如$TMAKEDIR)/lib/qws/linux-x86-g++ 交叉編譯 TMAKEPATH=/tmake的安裝路徑(如$TMAKEDIR)/lib/qws/linux-arm-g++ 5.通過tmake自動生成Makefile文件 tmake o Makefile filename.pro 6. make生成可執(zhí)行文件,54,感謝您參加博創(chuàng)嵌入式教學培訓!,

展開閱讀全文
溫馨提示:
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!