Qt程序設計基礎1_第1頁
Qt程序設計基礎1_第2頁
Qt程序設計基礎1_第3頁
Qt程序設計基礎1_第4頁
Qt程序設計基礎1_第5頁
已閱讀5頁,還剩86頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

Qt程序開發入門第一部分: Qt基礎程序設計基礎2GUI所謂GUI(GraphicsUserInterface),就是圖形用戶界面。圖形用戶界面的廣泛流行是當今計算機技術的重大成就之一,3*WIMP。其中,W(Windows)指窗口,是用戶或系統的一個工作區域。一個屏幕上可以有多個窗口。I(Icons)指圖圖標,是形象化的圖形標志,易于人們隱喻和理解。M(Menu)指菜單,可供用戶選擇的功能提示。P(PointingDevices)指鼠標等,便于用戶直接對屏幕對象進行操作。*用戶模型。GUI采用了不少Desktop桌面辦公的隱喻,讓使用者共享一個直觀的界面框架。由于人們熟悉辦公桌的情況,因而對計算機顯示的圖標的含義容易理解,諸如:文件夾、收件箱、畫筆、工作簿、鑰匙及時鐘等。*直接操作。過去的界面不僅需要記憶大量命令,而且需要指定操作對象的位置,如行號、空格數、X及Y的坐標等。采用GUI后,用戶可直接對屏幕上的對象進行操作,如拖動、刪除、插入以及所得(WhatYouSeeIsWhatYouGet,WYSIWYG)。用視、點(鼠標)代替了放大和旋轉等。用戶執行操作后,屏幕能立即給出反饋信息或結果,稱為所見即記、擊(鍵盤),給用戶帶來了方便4通常所見的GUI都是位于PC機上的,但是在PC上GUI并不適合嵌入式系統。嵌入式設備有嚴格的資源要求(比如十分有限的存儲空間)。同時嵌入式系統經常有一些特殊的要求,而普通的PC上的圖形窗口系統是不能滿足這些要求的。5嵌入式GUI要求輕型,占用源少;高性能;高可靠性;可配置。6常用GUI介紹

1.MiniGUI由北京飛漫軟件技術有限公司開發MiniGUI(),是國內為數不多的幾大國際知名自由軟件之一。MiniGUI

是面向實時嵌入式系統的輕量級圖形用戶界面支持系統,1999年初遵循GPL條款發布第一個版本以來,已廣泛應用于手持信息終端、機頂盒、工業控制系統及工業儀表、彩票機、金融終端等產品和領域。目前,MiniGUI

已成為跨操作系統的圖形用戶界面支持系統,可在Linux/uClinux、eCos、uC/OS-II、VxWorks等操作系統上運行;已驗證的硬件平臺包括Intelx86、ARM(ARM7/AMR9/StrongARM/xScale)、PowerPC、MIPS、M68K(DragonBall/ColdFire)等等。72.MicroWindows

MicroWindows(http://)是一個開放源碼的項目,目前由美國CenturySoftware公司主持開發。該項目的開發一度非常活躍,國內也有人參與了其中的開發,并編寫了GB2312等字符集的支持。但在Qt/Embedded發布以來,該項目變得不太活躍,并長時間停留在0.89Pre7版本。可以說,以開放源碼形勢發展的MicroWindows項目,基本停滯。8

MicroWindows

是一個基于典型客戶/服務器體系結構的GUI系統,基本分為三層。最底層是面向圖形輸出和鍵盤、鼠標或觸摸屏的驅動程序;中間層提供底層硬件的抽象接口,并進行窗口管理;最高層分別提供兼容于XWindow和WindowsCE(Win32子集)的API。95.Qt/EmbeddedQt/Embedded是著名的Qt庫開放商正在進行的面向嵌入式系統的Qt版本。這個版本的主要特點是可移植性較好,許多基于Qt的XWindow程序可以非常方便地移植到嵌入式版本。10Qt簡介Qt是Trolltech公司的標志性產品,是一個跨平臺的C++圖形用戶界面(GUI)工具包Qt應用程序接口與工具兼容于所有支持平臺,讓開發員們掌握一個應用程序接口,便可執行與平臺非相關的應用開發與配置Qt/Windows

(WindowsXP,2000,NT4,Me/98)Qt/Mac

(MacOSX)Qt/X11

(Linux,Solaris,HP-UX,IRIX,AIX等)Qt對不同平臺的專門API進行了 專門的封裝(文件處理,網絡等)

Trolltech公司由Haavard

Nord(執行總裁)和Eirik

Chambe-Eng(總裁)于1994年在挪威創立的,2008年6月被NOKIA收購。通過直銷,轉售和戰略合作伙伴等多種方式聯合銷售產品。Trolltech是一家擁有兩個主線產品(Qt和Qtopia)的軟件公司。

Trolltech采取了成功的雙重授權戰略,為開發者提供商業和免費軟件的授權使用。

擁有遍布全球60個國家的4400個客戶,其中包括Adobe,IBM,Sharp,Siemens及其他全球知名公司。

11Trolltech的雙重授權模式Trolltech公司提供兩種授權模式,一種用于商業性質的授權,一種用于免費的開源授權12QT的歷史1996Sep24Qt1.01996OctKDE組織成立1998Apr05Trolltech的程序員在5天之內將Netscape5.0從Motif移植到Qt上1998Apr08KDEFreeQt基金會成立1998Jul12KDE1.0發布1999Jun25Qt2.0發布2000Mar20嵌入式Qt發布2000Sep06Qt2.2發布2000Sep04Qtfreeedition開始使用GPL2004Aug4.02008Aug4.4發布,集成Webkit和Phonon13QT產品產品包括Qt、基于Framebuffer的QtEmbedded、快速開發工具QtDesigner、國際化工具QtLinguist等部分。Qt/Embedded是面向嵌入式系統的Qt版本,是Qt的嵌入式Linux窗口,是完整的自包含C++GUI(圖形用戶界面)和基于Linux的嵌入式平臺開發工具。Qt/EmbeddedAPI可以用于多種開發項目。許多基于Qt的XWindow程序可以非常方便地移植到嵌入式版本,適用于高端PDA等產品14QT產品

Qtopia是為了Linux的PDA、智能電話和其他移動設備設計的一個全面并且可以用戶化的應用程序平臺和用戶界面。它是第一個面向嵌入式Linux的全方位應用程序開發平臺,它可以并且已經應用于眾多的基于Linux的PDA(個人數字助理)設備和智能電話。

15Qt特征(一)面向對象Qt具有模塊設計和注重軟件構件或元素的可重用性的特點,一個組件不需要知道它的內容和用途,通過signal和slot與外界通信、交流。而且,所有Qt的組件都可通過繼承。構件支持Qt提供信號(signal)和插槽(slot)概念,這是一種類型安全的方法,它允許回調,并支持對象之間在彼此不知道對方信息的情況下進行合作,這使得Qt非常適合于真正的構件編程1617Qt特征(一)友好的聯機幫助Qt提供了大量的聯機參考文檔,有超文本HTML方式,也有Unix幫助頁man手冊頁和補充說明。并且對于初學者,其中的指南將一步步介紹如何進行Qt編程18Qt特征(二)便利性由于Qt是一種跨平臺的GUI工具包,它對編程者隱藏了在處理不同窗口系統時潛在的問題,Qt定義了一些類來隱藏在不同操作系統上不同處理方式下的細節問題用戶自定義使用其他的一些工具包經常會遇到這樣一種情況,沒有真正適合需求的組件,聲稱自定義的組件對用戶來說就像一個黑匣子。而在Qt中生成用戶自定義的組件非常簡單,而且易于修改組件的行為國際化Qt為本地化應用提供完全的支持,所有用戶界面的文本或字符串都可以利用翻譯工具將其譯成各國語言。

Qt還支持雙字節16bit國際字符標準19Qt特征(三)豐富的API函數Qt為專業應用提供了大量的函數,在Qt的API中含有大約250個C++類,大多數的類都是GUI專有的可用戶化外觀Qt支持主題,基于Qt的應用程序能夠在Windows外觀、Motif外觀,以及其它一些用戶化外觀主題之間切換完整的一套組件工具Qt編程的基本模塊稱之為組件,組件是用戶界面的組成部分,比如按鈕、滾動條。Qt含有用來創建專業外觀的用戶界面所需要的所有組件。20主題21MotifMotif最初是由OSF(開放基金協會)開發的一個工業標準的GUI(圖形用戶接口)。在開放系統(如Linux)上,可以使用免費的Motif。

Motif最先實現并運行于支持X窗口系統上,它是UNIX系統的主要用戶接口。目前已經應用于超過200種硬件和軟件平臺。MotifGUIToolkit推動了異種機和網絡環境下的應用開發,各種機器包括便攜機、PC、工作站、超級計算機都得益于Motif環境下的應用程序一致的行為和視感。用MotifGUI開發的應用軟件具有高度的可移植性、可交互性、以及可伸縮性。

22高性能的工具

對于庫來講,它的有效性遠超過應用性。為了提高Qt庫的有效性、快捷性,對其進行了優化,Qt能執行一些基本的任務,比如圖形的潤色,比一般的基于平臺的代碼要快。Qt是基于Xlib,而不依賴Motif工具包。優越的繪畫功能

Qt的繪畫工具QPainter類,在任意一個繪圖設備上都可以潤色圖形。繪圖設備包括組件、像素映射、圖形文件和打印機,相同的代碼可以用在4種不同類型的設備上。QPainter類支持復雜的同等系統的轉換,很容易在所有平臺上畫旋轉文本和像素映射。Xwindows的底層庫23QPainter繪制的圖形:24繪制2D/3D圖形功能Qt提供了QGLWidget類,使用該類能夠繪制2D/3D圖形。用QGLWidget就像用一個Qt組件一樣方便。25Qt系統構造庫描述QtCore核心非GUI功能QtGui核心GUI功能QtNetwork網絡模塊QtOpenGLOpenGL模塊(為三維繪圖提供的標準應用編程接口)QtSqlSQL模塊QtSvgSVG透視圖類QtXmlXML模塊Qt3Support支持Qt3的類QAxContainerActiveQt

客戶端的擴充QAxServerActiveQt

服務器段的擴充QtAssistantQt助手的語言類QtDesignerQt設計器的擴展類QtUiTools生成動態GUI類QtTest單元測試工具類2627Qt編程特點初始化在Qt應用程序中,首先要創建一個QApplication對象,QApplication類負責圖形用戶界面應用程序的控制流和主設置,在main.cpp中定義如下:

int

main(int

argc,char**argv){

QApplication

a(argc,argv); …… }

281.初始化QApplication包含在main()函數的事件循環體中,對所有來自Window系統和其它源文件的事件進行處理和調度,還包括處理應用程序的初始化和結束,并且提供會話管理。在Qt應用程序中,不管有多少個窗口,QApplication對象只能有一個,而且必須在其他對象之前創建。QApplication類中封裝了很多函數,其中包括:系統設置:setFont()用來設置字體事件處理:sendEvent()用來發送事件

GUI風格:setStyles()設置圖形用戶界面的風格

顏色使用:colorSpec()用來返回顏色文件

文本處理:translate()用來處理文本信息

創建組件:setmainWidget()用來設置窗口的主組件

……292.窗口的創建 在Qt程序中,創建窗口比較簡單,只要在main.cpp文件中為ApplicationWindow建立一個指針:ApplicationWindow*mw=newApplicatonWindow();ApplicationWindow是在Application.h中定義的類,它是一個QmainWindow的繼承類組件的創建需要調用相應組件的類,并在頭文件中包含此類的頭文件或者創建自定義類,繼承以后組件類的功能#include“qpushbutton.h”3.組件的創建303.組件的創建

classhello::public

Qwidget {

…… }

hello類繼承了Qwidget類的特征,并加入了自定義的特征功能,同樣需要在頭文件中包含此類的頭文件 在main.cpp的函數中需要創建hello類的實例,或創建QPushButton類的實例,才可以使用

helloh(string);

QPushButtonhello(“Hello,world!”,0);

如果組件本身可以作為主窗口,則無需設置主窗口。在上例中,下壓按鈕創建時其構造函數中的第二個參數為0,表示按鈕所在窗口為主窗口,不需要設置主窗口。否則需要調用QWidget成員函數setMainWidget()來進行設置31窗體(Qwidget)Qt擁有豐富的滿足不同需求的窗體(按鈕,滾動條等等),Qt的窗體使用起來很靈活,為了滿足特別的要求,它很容易就可以被子類化。窗體是Qwidget類或它子類的實例,客戶自己的窗體類需要從Qwidget它的子類繼承。323.組件的創建

h.setMainWidget(&h);//將m設為當前窗口

組件創建時一般是不可見的,這樣的好處在于避免大量組件創建時造成的屏幕閃爍現象,要使組件可見需要調用QWidget類的成員函數show()來顯示組件

h.show();

在X程序中,敲擊鍵盤,鼠標指針在窗口中的移動或鼠標按鍵動作等,都是事件

在Xt中提供了提供了一種叫做回調的事件處理方式。它通過翻譯表,將事件映射為相應的動作,當組件得到事件通知,就去表中找出相應的動作例程進行處理。這種機制需要應用程序注冊有關組件的回調函數或普通的事件處理函數,以分發循環Xt的事件4.事件33

Qt事件的處理過程:QApplication的事件循環體從事件隊列中拾取本地窗口系統事件或其他事件,譯成QEvent(),并送給QObject::event(),最后送給QWidget::event()本別對事件處理4.事件QApplicationQWidget::event()

QEventQObject::event()Y

等待事件讀取事件檢查事件類型處理事件退出事件處理循環事件處理循環部分N344.事件

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

在Qt程序設計中,凡是包含signal和slot的類中都要加上Q_OBJECT的定義,下面的例子給出了如何在一個類中定義signal和slot:classStudent:publicQObject{Q_OBJECTpublic:Student(){myMark=0;}

intmark()const{returnmyMark;}publicslots:voidsetMark(int

newMark);signals:voidmarkChanged(int

newMark);private:

int

myMark;};36Signal和Slot的聲明(二)

signal的發出一般在事件的處理函數中,利用emit發出signal,在下面的例子中在在事件處理結束后發出signalvoidStudent::setMark(int

newMark){if(newMark!=myMark){

myMark=newMark;

emitmarkChanged(myMark);}}37Signal和Slot的連接(一) 在signal和slot聲明以后,需要使用connect()函數將它們連接起來。connect()函數屬于QObject類的成員函數,它能夠連接signal和slot,也可以用來連接signal和signal函數原形如下:bool

connect(const

QObject

*

sender,const

char

*

signal, const

QObject

*

receiver,const

char

*

member)

其中第一個和第三個參數分別指出signal和slot是屬于那個對象或組件

將信號發送者sender對象中的信號signal與接受者receiver中的member槽函數聯系起來。

38Signal和Slot的連接(二) 在使用connect()函數進行來接的時候,還需要用到SIGNAL()和SLOT()這兩個宏,使用方法如下:

QLabel*label=newQLabel;

QScrollBar*scroll=newQScrollBar;

QObject::connect(scroll,SIGNAL(valueChanged(int)), label,SLOT(setNum(int)));

39Signal和Slot的連接方式(一)40Signal和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()));41Signal和Slot的連接方式(三)一個信號連接到另一個信號connect(lineEdit,SIGNAL(textChanged(const

QString&)), this,SIGNAL(updateRecord(const

QString&)));取消一個連接disconnect(lcd,SIGNAL(overflow()),this,

SLOT(handleMathError()));取消一個連接不是很常用,因為Qt會在一個對象被刪除后自動取消這個對象所包含的所有的連接42退出事件程序退出事件程序,只需要在程序結束時返回一個exec(),例如: returna.exec();其中a為QApplication的實例,當調用exec()將進入主事件的循環中,直到exit()被調用或主窗口部件被銷毀43整個Qt應用程序的執行過程初始化處理事件結束Qt應用程序Qt庫請求隊列事件隊列Xserver設備相關層計算機鍵盤鼠標屏幕44幾個例子45HELLOQT(1)

#include<QApplication>#include<QLabel>intmain(intargc,char*argv[]){

QApplicationapp(argc,argv);

QLabel*label=newQLabel("HelloQt!");

label->show();

returnapp.exec();}46HELLOQT(2):用HTML格式化

#include<QtGui>intmain(intargc,char*argv[]){

QApplicationapp(argc,argv);

QLabel*label=newQLabel("<h2><i>Hello</i>"

"<fontcolor=red>Qt!</font></h2>");

label->show();

returnapp.exec();}47創建鏈接

intmain(intargc,char*argv[]){

QApplicationapp(argc,argv);

QPushButton*button=newQPushButton("Quit");

QObject::connect(button,SIGNAL(clicked()),

&app,SLOT(quit()));

button->show();

returnapp.exec();}48基本布局(1)

intmain(intargc,char*argv[]){

QApplicationapp(argc,argv);

QSpinBox*spinBox=newQSpinBox;

QSlider*slider=newQSlider(Qt::Horizontal);

QObject::connect(spinBox,SIGNAL(valueChanged(int)),

slider,SLOT(setValue(int)));

QObject::connect(slider,SIGNAL(valueChanged(int)),

spinBox,SLOT(setValue(int)));49基本布局(2)

QHBoxLayout*layout=newQHBoxLayout;

layout->addWidget(spinBox);

layout->addWidget(slider);

QWidget*window=newQWidget;

window->setWindowTitle("EnterYourAge");

window->setLayout(layout);

window->show();

returnapp.exec();}

QHBoxLayout水平布局管理器

50

QHBoxLayout水平布局管理器

創建一個窗體并排擺放一個按鈕一個標簽,使他們能夠隨著窗體的水平縮放而縮放實現這個功能需要使用布局管理器中的QHBoxlayout進行布局,把這連個組件放入QHBoxlayout中。51QHBoxLayout水平布局管理器#include<QApplication>

#include<QLabel>

#include<QPushButton>

#include<QHBoxLayout>

#include<QWidget>

int

main(int

argc,char*argv[])

{

QApplicationapp(argc,argv);

QHBoxLayout*hlayout=newQHBoxLayout();

QPushButton*button=newQPushButton("imok");

QLabel*label=newQLabel("HelloQt!");

QWidget*window=newQWidget;

window->setWindowTitle("main");

hlayout->addWidget(button);

hlayout->addWidget(label);

window->setLayout(hlayout);

window->show();

returnapp.exec();

}52Qt提供了三種用于布局管理的類:QHBoxLayout,QVBoxLayout

和QgridLayout。QHBoxLayout,QVBoxLayout

和QGridLayout

的布局效果53一個完整的Qt程序1#include<qapplication.h>2#include<qlabel.h>3int

main(int

argc,char**argv)4{5QApplicationapp(argc,argv);6QLabel*hello=newQLabel("HelloQt/Embedded!",0);7app.setMainWidget(hello);8hello->show();9returnapp.exec();10}543個主要的基類QObject

QObject類是所有能夠處理signal、slot和事件的Qt對象的基類,原形如下:

QObject::QObject(QObject

*

parent=0,const

char

*

name=0)

創建帶有父對象及其名字的對象,對象的父對象可以看作為這個對象的所有者。比如,對話框是其中的ok和cancel按鈕的父對象。

在上面的函數中如果parent為0則構造一個無父的對象,如果對象是一個組件,則它就會成為頂層的敞口。55QObject類(一)

class

Mandelbrot:public

QObject { Q_OBJECT//需要使用signal和slot

public :

Mandelbrot(QObect*parent=0,constchar*name); …… publicslots: voidstart(); signals: voiddone(); privateslots: voidcalculate(); private:

QTimertimer; …… };56QObject類(二)

//構造初始化一個Mandelbrot對象

Mandelbrot::Mandelbrot(QObject*parent=0,constchar*name) :QObject(parent,name) {

connect(&timer,SIGNAL(timeout()),SLOT(calculate()));

……

{573個主要的基類2.QApplication

QApplication類負責GUI應用程序的控制流和主要的設置,它包括主事件循環體,負責處理和調度所有來自窗口系統和其他資源的事件,并且處理應用程序的開始、結束以及會話管理,還包括系統和應用程序方面的設置。對于一個應用程序來說,建立此類的對象是必不可少的

QApplication和QWidget都是QObject類的子類58函數分組系統設置desktopSettingsAware()、setDesktopSettingsAware()、cursorFlashTime()、setCursorFlashTime()、doubleClickInterval()、setDoubleClickInterval()、wheelScrollLines()、setWheelScrollLines()、palette()、setPalette()、font()、setFont()、fontMetrics()。事件處理exec()、processEvents()、enter_loop()、exit_loop()、exit()、quit()。sendEvent()、postEvent()、sendPostedEvents()、removePostedEvents()、hasPendingEvents()、notify()、macEventFilter()、qwsEventFilter()、x11EventFilter()、x11ProcessEvent()、winEventFilter()。圖形用戶界面風格

style()、setStyle()、polish()。顏色使用colorSpec()、setColorSpec()、qwsSetCustomColors()。文本處理setDefaultCodec()、installTranslator()、removeTranslator()、translate()。窗口部件mainWidget()、setMainWidget()、allWidgets()、topLevelWidgets()、desktop()、activePopupWidget()、activeModalWidget()、clipboard()、focusWidget()、winFocus()、activeWindow()、widgetAt()。高級光標處理hasGlobalMouseTracking()、setGlobalMouseTracking()、overrideCursor()、setOverrideCursor()、restoreOverrideCursor()。X窗口系統同步flushX()、syncX()。對話管理isSessionRestored()、sessionId()、commitData()、saveState()。線程lock()、unlock()、locked()、tryLock()、wakeUpGuiThread()。雜項closeAllWindows()、startingUp()、closingDown()、type()。593個主要的基類3.

QWidget

QWidget類是所有用戶接口對象的基類,它繼承了QObject類的屬性。組件是用戶界面的單元組成部分,它接收鼠標、鍵盤和其它從窗口系統來的事件,并把它自己繪制在盤屏幕上

QWidget類有很多成員函數,但一般不直接使用,而是通過子類繼承來使用其函數功能。如,QPushButton、QlistBox等都是它的子類60窗體是Qwidget類或它子類的實例,客戶自己的窗體類需要從Qwidget它的子類繼承。61一個窗體可以包含任意數量的子窗體,子窗體可以顯示在父窗體的客戶區,一個沒父窗體的窗體我們稱之為頂級窗體(一個“窗口”),一個窗體通常有一個邊框和標題欄作為裝飾。Qt并未對一個窗體有什么限制,任何類型的窗體可以是頂級窗體,任何類型的窗體可以是別的窗體的子窗體。在父窗體顯示區域的子窗體的位置可以通過布局管理自動的進行設置,也可以人為的指定。當父窗體無效,隱藏或被刪除后,它的子窗體都會進行同樣的動作。62上下文函數窗口函數show()、hide()、raise()、lower()、close()。頂級窗口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()、setSizePolicy()、sizeHint()、updateGeometry()、layout()、move()、resize()、setGeometry()、frameGeometry()、geometry()、childrenRect()、adjustSize()、mapFromGlobal()、mapFromParent()、mapToGlobal()、mapToParent()、maximumSize()、minimumSize()、sizeIncrement()、setMaximumSize()、setMinimumSize()、setSizeIncrement()、setBaseSize()、setFixedSize()。模式isVisible()、isVisibleTo()、visibleRect()、isMinimized()、isDesktop()、isEnabled()、isEnabledTo()、isModal()、isPopup()、isTopLevel()、setEnabled()、hasMouseTracking()、setMouseTracking()、isUpdatesEnabled()、setUpdatesEnabled()。觀感style()、setStyle()、cursor()、setCursor()、font()、setFont()、palette()、setPalette()、backgroundMode()、setBackgroundMode()、colorGroup()、fontMetrics()、fontInfo()。鍵盤焦點函數isFocusEnabled()、setFocusPolicy()、focusPolicy()、hasFocus()、setFocus()、clearFocus()、setTabOrder()、setFocusProxy()。鼠標和鍵盤捕獲grabMouse()、releaseMouse()、grabKeyboard()、releaseKeyboard()、mouseGrabber()、keyboardGrabber()。事件處理器event()、mousePressEvent()、mouseReleaseEvent()、mouseDoubleClickEvent()、mouseMoveEvent()、keyPressEvent()、keyReleaseEvent()、focusInEvent()、focusOutEvent()、wheelEvent()、enterEvent()、leaveEvent()、paintEvent()、moveEvent()、resizeEvent()、closeEvent()、dragEnterEvent()、dragMoveEvent()、dragLeaveEvent()、dropEvent()、childEvent()、showEvent()、hideEvent()、customEvent()。變化處理器enabledChange()、fontChange()、paletteChange()、styleChange()、windowActivationChange()。系統函數parentWidget()、topLevelWidget()、reparent()、polish()、winId()、find()、metric()。這是什么的幫助customWhatsThis()。內部核心函數focusNextPrevChild()、wmapper()、clearWFlags()、getWFlags()、setWFlags()、testWFlags()。63主要的類描述抽象窗口部件類抽象窗口部件類是通過子類來使用的。高級窗口部件類高級的GUI窗口部件,比如列表視圖和進度條基本窗口部件類基本的GUI窗口部件,比如按鈕、組合框和滾動條數據庫類與數據庫相關的類,比如與SQL數據庫相關的類。日期與時間類處理日期與時間的類拖放類處理拖放和MIME類型的編碼和解碼類環境類提供了多樣全面的服務,比如事件處理、系統設置訪問和國際化等

服務的類事件類用來生成和處理事件的類非GUI類非GUI類是一個集合類。比如:列表、隊列、堆棧和字符串,它們

不需要QApplication類就可以和其他類一起使用。多媒體、圖形和打印類該類主要提供支持圖形(2D、3D和OpenGL),圖像的編碼、解碼和處理,聲音,動畫,打印等等。幫助系統類用來給應用程序提供在線幫助的類。布局管理類用來處理自動調整窗口部件的大小和位置,能夠構成復雜對話框的類。共享類為了快速復制而使用引用計數的類。Qt系統的類Qt-

C++圖形用戶界面庫64Qt系統的類Qt-

C++圖形用戶界面庫主要的類描述輸入/輸出和網絡類提供文件輸入輸出,目錄和網絡操作。主窗口和相關類一切你所需要的典型現代主程序窗口,包括目錄、工具條、工作區等等。雜類各種各樣其他有用的類模塊/視圖類該類主要用于設計模塊/視圖平臺的類。對象模型Qt圖形用戶界面的工具包底層對象模型。組織者用戶接口組織者,比如:分隔器、TAB條、按鈕組等等。插件類插件相關類。標準對話框用于文件、字體、顏色選擇和更多的已經做好的對話框。模板類Qt的模板庫容器類。文本相關類文本處理的類。(也可以參考XML類。)線程類提供線程支持的類。窗口外觀和風格可以自定義風格、字體、顏色等等外觀的類。XML類支持XML的類,例如:DOM和SAX。QtopiaCore類是QtopiaCore一個特殊的類(Qt的嵌入Linux)。65第二部分:QtDesigner66QtDesigner Qt應用程序除了使用手工編寫代碼的方式外,還可以用過QtDesinger來完成,QtDesigner的功能十分強大,界面類似于我們常用的VB,而且還提供了大量可供編程使用的組件6768基于QtDesigner程序設計(一) 在使用QtDesigner程序開發時,一般要涉及到下面幾個步驟: 1.創建和初始化子部件 2.設置子部件布局 3.設置Tab鍵次序(不是必須)

4.建立信號與插槽的連接

69基于QtDesigner程序設計(二)1.創建并布置部件2.對部件使用布局管理3.建立信號與插槽的連接70基于QtDesigner程序設計(三)編輯兩個部件之間信號與插槽之間的連接方式71基于QtDesigner程序設計(四) QtDesigner下不同風格的預覽72QtDesigner的工作過程QtDesigner將工程文件組織成.ui的文件由.ui文件生成.cpp

和.h文件.ui-----xmluic生成moc_filenaem.cppmoc73QTui文件介紹1.生成方式:QT通過QTdesigner可以生成ui文件(.ui&&.ui.h)

2.UI文件內容:以XML方式記錄了QTdesigner生成的界面的相關內容,大體可以分為如下內容widget屬性,其內容(圖形元素,layout。。)的相關屬性頭文件

變量槽函數3.通過UIC(userinterfacecompiler)可以把UI文件內容翻譯成標準.h,.cpp文件

74QtDesigner功能框圖75子類繼承方式(Qt2.X)76第三部分:Qt開發環境的建立77建立Qt/Embedded開發環境(一) 在我們嵌入式開發中Qt提供了使用在小型嵌入式設備上的輕量級的工具包Qt/Embedded(Qt/E),要使用Qt/E需要和Qt/X11以及tmake工具進行配合,我們可以在Trolltech公司的ftp站點下載到這些工具包的源代碼ftp:///qt/source/

這里列出這些工具包的一個可用的組合Qt/Embedded2.3.10Qt2.3.2forX11tmake1.13

XWindow系統(X11或X)是一種位圖顯示的視窗系統。它是在Unix和類Unix操作系統,以及OpenVMS上建立圖形用戶界面的標準工具包和協議

78建立Qt/Embedded開發環境(二)解壓縮并設置環境變量安裝tmake

cd~/pxa270Qt tar–xzftmake-1.13.tar.gz exportTMAKEDIR=$PWD/tmake-1.13安裝Qt2.3.2cd~/pxa270Qttar–xzfqt-x11-2.3.2.tar.gzexportQT2DIR=$PWD/qt-2.3.2安裝Qt/E2.3.10cd~/pxa270Qttar–xzfqt-embedded-2.3.10-free.tar.gzexportQTEDIR=$PWD/qt-2.3.1079建立Qt/Embedded開發環境(三) 編譯Qt/Embedded庫的時候需要注意,我們通常是要將庫源碼編譯兩次。一次是為了使我們的程序能夠在pc機上顯示出來而編譯的為pc機上的程序使用的Qt/E庫;另一次是編譯在開發板上使用的庫,是為開發板上的應用程序準備的庫文件

以編譯pc機上的Qt/E庫為例,編譯Qt/E的過程主要分為三步,分別是編譯Qt2.3.2,編譯qvfb,編譯Qt/Embedded2.3.1080建立Qt/Embedded開發環境(四)編譯Qt2.3.2cd$QT2DIRexportTMAKEPATH=$TMAKEDIR/lib/linux-g++exportQTDIR=$QT2DIRexportPATH=$QTDIR/bin:$PATHexportLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH./configure-no-xftmakemkdir$QTEDIR/binc

溫馨提示

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

評論

0/150

提交評論