




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Qt程序開發(fā)入門北京博創(chuàng)興業(yè)科技有限公司第1頁,共54頁。第一部分: Qt基礎程序設計基礎博創(chuàng)科技 張笑天zhangxt_2第2頁,共54頁。Qt簡介Qt是Trolltech公司的標志性產品,是一個跨平臺的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進行了專門的封裝(文
2、件處理,網絡等) 3第3頁,共54頁。Trolltech的雙重授權模式Trolltech公司提供兩種授權模式,一種用于商業(yè)性質的授權,一種用于免費的開源授權4第4頁,共54頁。Qt特征(一)面向對象Qt具有模塊設計和注重軟件構件或元素的可重用行的特點構件支持Qt提供信號(signal)和插槽(slot)概念,這是一種類型安全的方法,它允許回調,并支持對象之間在彼此不知道對方信息的情況下進行合作,這使得Qt非常適合于真正的構件編程友好的聯(lián)機幫助Qt提供了大量的聯(lián)機參考文檔,有超文本HTML方式,也有Unix幫助頁man手冊頁和補充說明。并且對于初學者,其中的指南將一步步介紹如何進行Qt編程5第5
3、頁,共54頁。Qt特征(二)便利性由于Qt是一種跨平臺的GUI工具包,它對編程者隱藏了在處理不同窗口系統(tǒng)時潛在的問題,Qt定義了一些類來隱藏在不同操作系統(tǒng)上不同處理方式下的細節(jié)問題用戶自定義使用其他的一些工具包經常會遇到這樣一種情況,沒有真正適合需求的組件,聲稱自定義的組件對用戶來說就像一個黑匣子。而在Qt中生成用戶自定義的組件非常簡單,而且易于修改組件的行為國際化Qt為本地化應用提供了完全的支持,所有用戶界面文本都可以基于消息翻譯表被翻譯成各國語言,Qt還支持雙字節(jié)16bit國際字符標準 6第6頁,共54頁。Qt特征(三)豐富的API函數Qt為專業(yè)應用提供了大量的函數,在Qt的API中含有大
4、約250個C+類,大多數的類都是GUI專有的可用戶化外觀Qt支持主題,基于Qt的應用程序能夠在Windows外觀、Motif外觀,以及其它一些用戶化外觀主題之間切換完整的一套組件工具Qt編程的基本模塊稱之為組件,組件是用戶界面的組成部分,Qt含有用來創(chuàng)建專業(yè)外觀的用戶界面所需要的所有組件7第7頁,共54頁。Qt編程特點初始化在Qt應用程序中,首先要創(chuàng)建一個QApplication對象,QApplication類負責圖形用戶界面應用程序的控制流和主設置,在main.cpp中定義如下:int main(int argc, char *argv) QApplication a(argc, argv)
5、; 8第8頁,共54頁。1.初始化QApplication包含在main()函數的事件循環(huán)體中,對所有來自Window系統(tǒng)和其它源文件的事件進行處理和調度,還包括處理應用程序的初始化和結束,并且提供會話管理。在Qt應用程序中,不管有多少個窗口,QApplication對象只能有一個,而且必須在其他對象之前創(chuàng)建。QApplication類中封裝了很多函數,其中包括: 系統(tǒng)設置:setFont() 用來設置字體 事件處理:sendEvent() 用來發(fā)送事件 GUI風格:setStyles() 設置圖形用戶界面的風格 顏色使用:colorSpec() 用來返回顏色文件 文本處理:translate
6、() 用來處理文本信息 創(chuàng)建組件:setmainWidget() 用來設置窗口的主組件 9第9頁,共54頁。2.窗口的創(chuàng)建在Qt程序中,創(chuàng)建窗口比較簡單,只要在main.cpp文件中為ApplicationWindow建立一個指針:ApplicationWindow *mw = new ApplicatonWindow();ApplicationWindow是在Application.h中定義的類,它是一個QmainWindow的繼承類組件的創(chuàng)建需要調用相應組件的類,并在頭文件中包含此類的頭文件或者創(chuàng)建自定義類,繼承以后組件類的功能#include “qpushbutton.h”3.組件的創(chuàng)建
7、10第10頁,共54頁。3.組件的創(chuàng)建class hello:public Qwidgethello類繼承了Qwidget類的特征,并加入了自定義的特征功能,同樣需要在頭文件中包含此類的頭文件在main.cpp的函數中需要創(chuàng)建hello類的實例,或創(chuàng)建QPushButton類的實例,才可以使用hello h(string);QPushButton hello(“Hello,world!”,0);如果組件本身可以作為主窗口,則無需設置主窗口。在上例中,下壓按鈕創(chuàng)建時其構造函數中的第二個參數為0,表示按鈕所在窗口為主窗口,不需要設置主窗口。否則需要調用QWidget成員函數setMainWidge
8、t()來進行設置11第11頁,共54頁。3.組件的創(chuàng)建h.setMainWidget(&h);組件創(chuàng)建時一般是不可見的,這樣的好處在于避免大量組件創(chuàng)建時造成的屏幕閃爍現(xiàn)象,要使組件可見需要調用QWidget類的成員函數show()來顯示組件h.show();在X程序中,敲擊鍵盤,鼠標指針在窗口中的移動或鼠標按鍵動作等,都是事件在Xt中提供了提供了一種叫做回調的事件處理方式。它通過翻譯表,將事件映射為相應的動作,當組件得到事件通知,就去表中找出相應的動作例程進行處理。這種機制需要應用程序注冊有關組件的回調函數或普通的事件處理函數,以分發(fā)循環(huán)Xt的事件4.事件12第12頁,共54頁。Qt事件的處理
9、過程:QApplication的事件循環(huán)體從事件隊列中拾取本地窗口系統(tǒng)事件或其他事件,譯成QEvent(),并送給QObject:event(),最后送給QWidget:event()本別對事件處理4.事件QApplicationQWidget:event() QEventQObject:event()Y 等待事件 讀取事件 檢查事件類型 處理事件 退出事件處理循環(huán)事件處理循環(huán)部分N13第13頁,共54頁。4.事件其實在Qt程序中,事件處理的方式也是回調,但與以往所不同的是,事件的發(fā)出和接收采用了信號(signal)和插槽(slot)機制,無須調用翻譯表。利用信號和插槽進行對象間的通信是Qt的
10、最主要特征之一當對象狀態(tài)發(fā)生改變的時候,發(fā)出signal通知所有的slot接收signal,盡管它并不知道哪些函數定義了slot,而slot也同樣不知道要接收怎樣的signalsignal和slot機制真正實現(xiàn)了封裝的概念,slot除了接收signal之外和其它的成員函數沒有什么不同,而且signal和slot之間也不是一一對應的。14第14頁,共54頁。Signal和Slot的聲明(一)在Qt程序設計中,凡是包含signal和slot的類中都要加上Q_OBJECT的定義,下面的例子給出了如何在一個類中定義signal和slot:class Student : public QObject Q
11、_OBJECTpublic: Student() myMark = 0; int mark() const return myMark; public slots: void setMark(int newMark);signals: void markChanged(int newMark);private: int myMark;15第15頁,共54頁。Signal和Slot的聲明(二)signal的發(fā)出一般在事件的處理函數中,利用emit發(fā)出signal,在下面的例子中在在事件處理結束后發(fā)出signalvoid Student:setMark(int newMark) if (newMa
12、rk!= myMark) myMark = newMark; emit markChanged(myMark); 16第16頁,共54頁。Signal和Slot的連接(一)在signal和slot聲明以后,需要使用connect()函數將它們連接起來。connect()函數屬于QObject類的成員函數,它能夠連接signal和slot,也可以用來連接signal和signal函數原形如下:bool connect ( constQObject*sender, constchar*signal, constchar*member ) const其中第一個和第三個參數分別指出signal和slo
13、t是屬于那個對象或組件17第17頁,共54頁。Signal和Slot的連接(二)在使用connect()函數進行來接的時候,還需要用到SIGNAL()和SLOT()這兩個宏,使用方法如下:QLabel *label = new QLabel; QScrollBar *scroll = new QScrollBar;QObject:connect( scroll,SIGNAL(valueChanged(int), label, SLOT(setNum(int) ); 18第18頁,共54頁。Signal和Slot的連接方式(一)19第19頁,共54頁。Signal和Slot的連接方式(二)同一個
14、信號連接多個插槽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(
15、);20第20頁,共54頁。Signal和Slot的連接方式(三)一個信號連接到另一個信號connect(lineEdit, SIGNAL(textChanged(const QString &), this, SIGNAL(updateRecord(const QString &);取消一個連接disconnect(lcd,SIGNAL(overflow(),this,SLOT(handleMathError();取消一個連接不是很常用,因為Qt會在一個對象被刪除后自動取消這個對象所包含的所有的連接21第21頁,共54頁。退出事件程序退出事件程序,只需要在程序結束時返回一個exec(),例如
16、:return a.exec();其中a為QApplication的實例,當調用exec()將進入主事件的循環(huán)中,直到exit()被調用或主窗口部件被銷毀22第22頁,共54頁。整個Qt應用程序的執(zhí)行過程 初始化 處理事件 結束Qt應用程序Qt 庫請求隊列事件隊列X server設備相關層計算機鍵盤鼠標屏幕23第23頁,共54頁。3個主要的基類QObjectQObject類是所有能夠處理signal、slot和事件的Qt對象的基類,原形如下:QObject:QObject ( QObject*parent =0,constchar*name = 0 ) 創(chuàng)建帶有父對象及其名字的對象,對象的父對
17、象可以看作為這個對象的所有者。比如,對話框是其中的ok和cancel按鈕的父對象。在上面的函數中如果parent為0則構造一個無父的對象,如果對象是一個組件,則它就會成為頂層的敞口。24第24頁,共54頁。QObject類(一)class Mandelbrot:public QObjectQ_OBJECT /需要使用signal和slotpublic:Mandelbrot(QObect *parent=0, const char *name);public slots:void start();signals:void done();private slots:void calculate()
18、;private:QTimer timer;;25第25頁,共54頁。QObject類(二)/構造初始化一個Mandelbrot對象Mandelbrot:Mandelbrot(QObject *parent=0, const char *name):QObject(parent, name)connect(&timer,SIGNAL(timeout(),SLOT(calculate();26第26頁,共54頁。3個主要的基類2. QApplicationQApplication類負責GUI應用程序的控制流和主要的設置,它包括主事件循環(huán)體,負責處理和調度所有來自窗口系統(tǒng)和其他資源的事件,并且處理
19、應用程序的開始、結束以及會話管理,還包括系統(tǒng)和應用程序方面的設置。對于一個應用程序來說,建立此類的對象是必不可少的QApplication和QWidget都是QObject類的子類27第27頁,共54頁。函數分組 系統(tǒng)設置 desktopSettingsAware()、setDesktopSettingsAware()、cursorFlashTime()、setCursorFlashTime()、doubleClickInterval()、setDoubleClickInterval()、wheelScrollLines()、setWheelScrollLines()、palette()、se
20、tPalette()、font()、setFont()、fontMetrics()。 事件處理 exec()、processEvents()、enter_loop()、exit_loop()、exit()、quit()。 sendEvent()、postEvent()、sendPostedEvents()、removePostedEvents()、hasPendingEvents()、notify()、macEventFilter()、qwsEventFilter()、x11EventFilter()、x11ProcessEvent()、winEventFilter()。 圖形用戶界面風格 s
21、tyle()、setStyle()、polish()。 顏色使用 colorSpec()、setColorSpec()、qwsSetCustomColors()。 文本處理 setDefaultCodec()、installTranslator()、removeTranslator()、translate()。 窗口部件 mainWidget()、setMainWidget()、allWidgets()、topLevelWidgets()、desktop()、activePopupWidget()、activeModalWidget()、clipboard()、focusWidget()、wi
22、nFocus()、activeWindow()、widgetAt()。 高級光標處理 hasGlobalMouseTracking()、setGlobalMouseTracking()、overrideCursor()、setOverrideCursor()、restoreOverrideCursor()。 X窗口系統(tǒng)同步 flushX()、syncX()。 對話管理 isSessionRestored()、sessionId()、commitData()、saveState()。 線程 lock()、unlock()、locked()、tryLock()、wakeUpGuiThread()。
23、 雜項 closeAllWindows()、startingUp()、closingDown()、type()。 28第28頁,共54頁。3個主要的基類3. QWidgetQWidget類是所有用戶接口對象的基類,它繼承了QObject類的屬性。組件是用戶界面的單元組成部分,它接收鼠標、鍵盤和其它從窗口系統(tǒng)來的事件,并把它自己繪制在盤屏幕上QWidget類有很多成員函數,但一般不直接使用,而是通過子類繼承來使用其函數功能。如,QPushButton、QlistBox等都是它的子類29第29頁,共54頁。上下文 函數 窗口函數 show()、hide()、raise()、lower()、clos
24、e()。 頂級窗口 caption()、setCaption()、icon()、setIcon()、iconText()、setIconText()、isActiveWindow()、setActiveWindow()、showMinimized()、showMaximized()、showFullScreen()、showNormal()。 窗口內容 update()、repaint()、erase()、scroll()、updateMask()。 幾何形狀 pos()、size()、rect()、x()、y()、width()、height()、sizePolicy()、setSizePo
25、licy()、sizeHint()、updateGeometry()、layout()、move()、resize()、setGeometry()、frameGeometry()、geometry()、childrenRect()、adjustSize()、mapFromGlobal()、mapFromParent()、mapToGlobal()、mapToParent()、maximumSize()、minimumSize()、sizeIncrement()、setMaximumSize()、setMinimumSize()、setSizeIncrement()、setBaseSize()、
26、setFixedSize()。 模式 isVisible()、isVisibleTo()、visibleRect()、isMinimized()、isDesktop()、isEnabled()、isEnabledTo()、isModal()、isPopup()、isTopLevel()、setEnabled()、hasMouseTracking()、setMouseTracking()、isUpdatesEnabled()、setUpdatesEnabled()。 觀感 style()、setStyle()、cursor()、setCursor()、font()、setFont()、palet
27、te()、setPalette()、backgroundMode()、setBackgroundMode()、colorGroup()、fontMetrics()、fontInfo()。 鍵盤焦點函數 isFocusEnabled()、setFocusPolicy()、focusPolicy()、hasFocus()、setFocus()、clearFocus()、setTabOrder()、setFocusProxy()。 鼠標和鍵盤捕獲 grabMouse()、releaseMouse()、grabKeyboard()、releaseKeyboard()、mouseGrabber()、ke
28、yboardGrabber()。 事件處理器 event()、mousePressEvent()、mouseReleaseEvent()、mouseDoubleClickEvent()、mouseMoveEvent()、keyPressEvent()、keyReleaseEvent()、focusInEvent()、focusOutEvent()、wheelEvent()、enterEvent()、leaveEvent()、paintEvent()、moveEvent()、resizeEvent()、closeEvent()、dragEnterEvent()、dragMoveEvent()、d
29、ragLeaveEvent()、dropEvent()、childEvent()、showEvent()、hideEvent()、customEvent()。 變化處理器 enabledChange()、fontChange()、paletteChange()、styleChange()、windowActivationChange()。 系統(tǒng)函數 parentWidget()、topLevelWidget()、reparent()、polish()、winId()、find()、metric()。 這是什么的幫助 customWhatsThis()。 內部核心函數 focusNextPrev
30、Child()、wmapper()、clearWFlags()、getWFlags()、setWFlags()、testWFlags()。 30第30頁,共54頁。一個完整的Qt程序1 #include 2 #include 3 int main(int argc, char *argv)4 5 QApplication app (argc, argv);6 QLabel *hello = new QLabel(Hello Qt/Embedded!, 0);7 app.setMainWidget(hello);8 hello-show();9 return app.exec();10 31第3
31、1頁,共54頁。第二部分:Qt Designer32第32頁,共54頁。Qt DesignerQt應用程序除了使用手工編寫代碼的方式外,還可以用過Qt Desinger來完成,Qt Designer的功能十分強大,界面類似于我們常用的VB,而且還提供了大量可供編程使用的組件33第33頁,共54頁。34第34頁,共54頁?;赒t Designer程序設計(一)在使用Qt Designer程序開發(fā)時,一般要涉及到下面幾個步驟:1.創(chuàng)建和初始化子部件2.設置子部件布局3.設置Tab鍵次序(不是必須)4.建立信號與插槽的連接35第35頁,共54頁?;赒t Designer程序設計(二)1.創(chuàng)建并布
32、置部件2.對部件使用布局管理3.建立信號與插槽的連接36第36頁,共54頁?;赒t Designer程序設計(三) 編輯兩個部件之間信號與插槽之間的連接方式37第37頁,共54頁。基于Qt Designer程序設計(四)Qt Designer下不同風格的預覽38第38頁,共54頁。Qt Designer的工作過程Qt Designer將工程文件組織成.ui的文件由.ui文件生成.cpp 和 .h文件.ui -xmluic生成moc_filenaem.cppmoc39第39頁,共54頁。Qt Designer 功能框圖40第40頁,共54頁。子類繼承方式(Qt 2.X)41第41頁,共54頁。
33、第三部分:Qt 開發(fā)環(huán)境的建立42第42頁,共54頁。建立Qt/Embedded開發(fā)環(huán)境(一)在我們嵌入式開發(fā)中Qt提供了使用在小型嵌入式設備上的輕量級的工具包Qt/Embedded(Qt/E),要使用Qt/E需要和Qt/X11以及tmake工具進行配合,我們可以在Trolltech公司的ftp站點下載到這些工具包的源代碼/qt/source/ 這里列出這些工具包的一個可用的組合Qt/Embedded 2.3.10 Qt 2.3.2 for X11 tmake 1.13 43第43頁,共54頁。建立Qt/Embedded開發(fā)環(huán)境(二)解壓縮并設置環(huán)境變量安裝tmakecd /pxa270Qtt
34、ar xzf tmake-1.13.tar.gzexport TMAKEDIR=$PWD/tmake-1.13安裝Qt 2.3.2cd /pxa270Qttar xzf qt-x11-2.3.2.tar.gzexport QT2DIR=$PWD/qt-2.3.2安裝Qt/E 2.3.10cd /pxa270Qttar xzf qt-embedded-2.3.10-free.tar.gzexport QTEDIR=$PWD/qt-2.3.1044第44頁,共54頁。建立Qt/Embedded開發(fā)環(huán)境(三)編譯Qt/Embedded庫的時候需要注意,我們通常是要將庫源碼編譯兩次。一次是為了使我們的
35、程序能夠在pc機上顯示出來而編譯的為pc機上的程序使用的Qt/E庫;另一次是編譯在開發(fā)板上使用的庫,是為開發(fā)板上的應用程序準備的庫文件以編譯pc機上的Qt/E庫為例,編譯Qt/E的過程主要分為三步,分別是編譯Qt 2.3.2 ,編譯qvfb,編譯Qt/Embedded 2.3.1045第45頁,共54頁。建立Qt/Embedded開發(fā)環(huán)境(四)編譯Qt 2.3.2cd $QT2DIRexport TMAKEPATH=$TMAKEDIR/lib/linux-g+export QTDIR=$QT2DIRexport PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH./configure -no-xftmakemkdir $QTEDIR/bincp bin/uic $QTEDIR/bin/46第46頁,共54頁。建立Qt/Embedded開發(fā)環(huán)境(五)編譯qvfbexport TMAKEPATH=$TMAKEDIR/lib/linux-g+export QTDIR=$QT2DIRexport PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATHcd $QTEDIR/tools/qvfbtmake -o
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 憲法的考試試題及答案
- 物理因子試題及答案高中
- 2025年河南省駐馬店市正陽縣中考三模歷史試題(含答案)
- 2025商業(yè)房產租賃合同解析
- 提升工程設計企業(yè)的市場競爭力與品牌價值
- 2025合同范本 管理與目的及合同資源管理樣板
- Pelagiomicin-B-生命科學試劑-MCE
- QC管理體系導入培訓教材
- 2025不銹鋼型材采購合同范本
- 2025家具代理合同范本
- 2025-2030年中國IT分銷市場競爭格局規(guī)劃研究報告
- 2025年初中學業(yè)水平考試語文模擬試卷(四)
- 光伏項目監(jiān)理竣工報告模
- 康復骨折病例匯報
- 福建省普通高中2023年學業(yè)水平合格性考試數學試題(原卷版)
- 2024年安徽省初中學業(yè)水平考試生物試題含答案
- 2025年小學一年級數學下冊無紙筆化評價方案及檢測題
- 法規(guī)解讀丨2024新版《突發(fā)事件應對法》及其應用案例
- 《穴位敷貼技術》課件
- 【MOOC】循證醫(yī)學-南通大學 中國大學慕課MOOC答案
- 《中央企業(yè)安全生產管理評價辦法》專題培訓
評論
0/150
提交評論