版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Qt程序開發(fā)入門第一部分: Qt基礎(chǔ)程序設(shè)計基礎(chǔ)2GUI所謂GUI(GraphicsUserInterface),就是圖形用戶界面。圖形用戶界面的廣泛流行是當(dāng)今計算機技術(shù)的重大成就之一,3*WIMP。其中,W(Windows)指窗口,是用戶或系統(tǒng)的一個工作區(qū)域。一個屏幕上可以有多個窗口。I(Icons)指圖圖標(biāo),是形象化的圖形標(biāo)志,易于人們隱喻和理解。M(Menu)指菜單,可供用戶選擇的功能提示。P(PointingDevices)指鼠標(biāo)等,便于用戶直接對屏幕對象進行操作。*用戶模型。GUI采用了不少Desktop桌面辦公的隱喻,讓使用者共享一個直觀的界面框架。由于人們熟悉辦公桌的情況,因而對計算機顯示的圖標(biāo)的含義容易理解,諸如:文件夾、收件箱、畫筆、工作簿、鑰匙及時鐘等。*直接操作。過去的界面不僅需要記憶大量命令,而且需要指定操作對象的位置,如行號、空格數(shù)、X及Y的坐標(biāo)等。采用GUI后,用戶可直接對屏幕上的對象進行操作,如拖動、刪除、插入以及所得(WhatYouSeeIsWhatYouGet,WYSIWYG)。用視、點(鼠標(biāo))代替了放大和旋轉(zhuǎn)等。用戶執(zhí)行操作后,屏幕能立即給出反饋信息或結(jié)果,稱為所見即記、擊(鍵盤),給用戶帶來了方便4通常所見的GUI都是位于PC機上的,但是在PC上GUI并不適合嵌入式系統(tǒng)。嵌入式設(shè)備有嚴(yán)格的資源要求(比如十分有限的存儲空間)。同時嵌入式系統(tǒng)經(jīng)常有一些特殊的要求,而普通的PC上的圖形窗口系統(tǒng)是不能滿足這些要求的。5嵌入式GUI要求輕型,占用源少;高性能;高可靠性;可配置。6常用GUI介紹
1.MiniGUI由北京飛漫軟件技術(shù)有限公司開發(fā)MiniGUI(),是國內(nèi)為數(shù)不多的幾大國際知名自由軟件之一。MiniGUI
是面向?qū)崟r嵌入式系統(tǒng)的輕量級圖形用戶界面支持系統(tǒng),1999年初遵循GPL條款發(fā)布第一個版本以來,已廣泛應(yīng)用于手持信息終端、機頂盒、工業(yè)控制系統(tǒng)及工業(yè)儀表、彩票機、金融終端等產(chǎn)品和領(lǐng)域。目前,MiniGUI
已成為跨操作系統(tǒng)的圖形用戶界面支持系統(tǒng),可在Linux/uClinux、eCos、uC/OS-II、VxWorks等操作系統(tǒng)上運行;已驗證的硬件平臺包括Intelx86、ARM(ARM7/AMR9/StrongARM/xScale)、PowerPC、MIPS、M68K(DragonBall/ColdFire)等等。72.MicroWindows
MicroWindows(http://)是一個開放源碼的項目,目前由美國CenturySoftware公司主持開發(fā)。該項目的開發(fā)一度非常活躍,國內(nèi)也有人參與了其中的開發(fā),并編寫了GB2312等字符集的支持。但在Qt/Embedded發(fā)布以來,該項目變得不太活躍,并長時間停留在0.89Pre7版本??梢哉f,以開放源碼形勢發(fā)展的MicroWindows項目,基本停滯。8
MicroWindows
是一個基于典型客戶/服務(wù)器體系結(jié)構(gòu)的GUI系統(tǒng),基本分為三層。最底層是面向圖形輸出和鍵盤、鼠標(biāo)或觸摸屏的驅(qū)動程序;中間層提供底層硬件的抽象接口,并進行窗口管理;最高層分別提供兼容于XWindow和WindowsCE(Win32子集)的API。95.Qt/EmbeddedQt/Embedded是著名的Qt庫開放商正在進行的面向嵌入式系統(tǒng)的Qt版本。這個版本的主要特點是可移植性較好,許多基于Qt的XWindow程序可以非常方便地移植到嵌入式版本。10Qt簡介Qt是Trolltech公司的標(biāo)志性產(chǎn)品,是一個跨平臺的C++圖形用戶界面(GUI)工具包Qt應(yīng)用程序接口與工具兼容于所有支持平臺,讓開發(fā)員們掌握一個應(yīng)用程序接口,便可執(zhí)行與平臺非相關(guān)的應(yīng)用開發(fā)與配置Qt/Windows
(WindowsXP,2000,NT4,Me/98)Qt/Mac
(MacOSX)Qt/X11
(Linux,Solaris,HP-UX,IRIX,AIX等)Qt對不同平臺的專門API進行了 專門的封裝(文件處理,網(wǎng)絡(luò)等)
Trolltech公司由Haavard
Nord(執(zhí)行總裁)和Eirik
Chambe-Eng(總裁)于1994年在挪威創(chuàng)立的,2008年6月被NOKIA收購。通過直銷,轉(zhuǎn)售和戰(zhàn)略合作伙伴等多種方式聯(lián)合銷售產(chǎn)品。Trolltech是一家擁有兩個主線產(chǎn)品(Qt和Qtopia)的軟件公司。
Trolltech采取了成功的雙重授權(quán)戰(zhàn)略,為開發(fā)者提供商業(yè)和免費軟件的授權(quán)使用。
擁有遍布全球60個國家的4400個客戶,其中包括Adobe,IBM,Sharp,Siemens及其他全球知名公司。
11Trolltech的雙重授權(quán)模式Trolltech公司提供兩種授權(quán)模式,一種用于商業(yè)性質(zhì)的授權(quán),一種用于免費的開源授權(quán)12QT的歷史1996Sep24Qt1.01996OctKDE組織成立1998Apr05Trolltech的程序員在5天之內(nèi)將Netscape5.0從Motif移植到Qt上1998Apr08KDEFreeQt基金會成立1998Jul12KDE1.0發(fā)布1999Jun25Qt2.0發(fā)布2000Mar20嵌入式Qt發(fā)布2000Sep06Qt2.2發(fā)布2000Sep04Qtfreeedition開始使用GPL2004Aug4.02008Aug4.4發(fā)布,集成Webkit和Phonon13QT產(chǎn)品產(chǎn)品包括Qt、基于Framebuffer的QtEmbedded、快速開發(fā)工具QtDesigner、國際化工具QtLinguist等部分。Qt/Embedded是面向嵌入式系統(tǒng)的Qt版本,是Qt的嵌入式Linux窗口,是完整的自包含C++GUI(圖形用戶界面)和基于Linux的嵌入式平臺開發(fā)工具。Qt/EmbeddedAPI可以用于多種開發(fā)項目。許多基于Qt的XWindow程序可以非常方便地移植到嵌入式版本,適用于高端PDA等產(chǎn)品14QT產(chǎn)品
Qtopia是為了Linux的PDA、智能電話和其他移動設(shè)備設(shè)計的一個全面并且可以用戶化的應(yīng)用程序平臺和用戶界面。它是第一個面向嵌入式Linux的全方位應(yīng)用程序開發(fā)平臺,它可以并且已經(jīng)應(yīng)用于眾多的基于Linux的PDA(個人數(shù)字助理)設(shè)備和智能電話。
15Qt特征(一)面向?qū)ο驫t具有模塊設(shè)計和注重軟件構(gòu)件或元素的可重用性的特點,一個組件不需要知道它的內(nèi)容和用途,通過signal和slot與外界通信、交流。而且,所有Qt的組件都可通過繼承。構(gòu)件支持Qt提供信號(signal)和插槽(slot)概念,這是一種類型安全的方法,它允許回調(diào),并支持對象之間在彼此不知道對方信息的情況下進行合作,這使得Qt非常適合于真正的構(gòu)件編程1617Qt特征(一)友好的聯(lián)機幫助Qt提供了大量的聯(lián)機參考文檔,有超文本HTML方式,也有Unix幫助頁man手冊頁和補充說明。并且對于初學(xué)者,其中的指南將一步步介紹如何進行Qt編程18Qt特征(二)便利性由于Qt是一種跨平臺的GUI工具包,它對編程者隱藏了在處理不同窗口系統(tǒng)時潛在的問題,Qt定義了一些類來隱藏在不同操作系統(tǒng)上不同處理方式下的細節(jié)問題用戶自定義使用其他的一些工具包經(jīng)常會遇到這樣一種情況,沒有真正適合需求的組件,聲稱自定義的組件對用戶來說就像一個黑匣子。而在Qt中生成用戶自定義的組件非常簡單,而且易于修改組件的行為國際化Qt為本地化應(yīng)用提供完全的支持,所有用戶界面的文本或字符串都可以利用翻譯工具將其譯成各國語言。
Qt還支持雙字節(jié)16bit國際字符標(biāo)準(zhǔn)19Qt特征(三)豐富的API函數(shù)Qt為專業(yè)應(yīng)用提供了大量的函數(shù),在Qt的API中含有大約250個C++類,大多數(shù)的類都是GUI專有的可用戶化外觀Qt支持主題,基于Qt的應(yīng)用程序能夠在Windows外觀、Motif外觀,以及其它一些用戶化外觀主題之間切換完整的一套組件工具Qt編程的基本模塊稱之為組件,組件是用戶界面的組成部分,比如按鈕、滾動條。Qt含有用來創(chuàng)建專業(yè)外觀的用戶界面所需要的所有組件。20主題21MotifMotif最初是由OSF(開放基金協(xié)會)開發(fā)的一個工業(yè)標(biāo)準(zhǔn)的GUI(圖形用戶接口)。在開放系統(tǒng)(如Linux)上,可以使用免費的Motif。
Motif最先實現(xiàn)并運行于支持X窗口系統(tǒng)上,它是UNIX系統(tǒng)的主要用戶接口。目前已經(jīng)應(yīng)用于超過200種硬件和軟件平臺。MotifGUIToolkit推動了異種機和網(wǎng)絡(luò)環(huán)境下的應(yīng)用開發(fā),各種機器包括便攜機、PC、工作站、超級計算機都得益于Motif環(huán)境下的應(yīng)用程序一致的行為和視感。用MotifGUI開發(fā)的應(yīng)用軟件具有高度的可移植性、可交互性、以及可伸縮性。
22高性能的工具
對于庫來講,它的有效性遠超過應(yīng)用性。為了提高Qt庫的有效性、快捷性,對其進行了優(yōu)化,Qt能執(zhí)行一些基本的任務(wù),比如圖形的潤色,比一般的基于平臺的代碼要快。Qt是基于Xlib,而不依賴Motif工具包。優(yōu)越的繪畫功能
Qt的繪畫工具QPainter類,在任意一個繪圖設(shè)備上都可以潤色圖形。繪圖設(shè)備包括組件、像素映射、圖形文件和打印機,相同的代碼可以用在4種不同類型的設(shè)備上。QPainter類支持復(fù)雜的同等系統(tǒng)的轉(zhuǎn)換,很容易在所有平臺上畫旋轉(zhuǎn)文本和像素映射。Xwindows的底層庫23QPainter繪制的圖形:24繪制2D/3D圖形功能Qt提供了QGLWidget類,使用該類能夠繪制2D/3D圖形。用QGLWidget就像用一個Qt組件一樣方便。25Qt系統(tǒng)構(gòu)造庫描述QtCore核心非GUI功能QtGui核心GUI功能QtNetwork網(wǎng)絡(luò)模塊QtOpenGLOpenGL模塊(為三維繪圖提供的標(biāo)準(zhǔn)應(yīng)用編程接口)QtSqlSQL模塊QtSvgSVG透視圖類QtXmlXML模塊Qt3Support支持Qt3的類QAxContainerActiveQt
客戶端的擴充QAxServerActiveQt
服務(wù)器段的擴充QtAssistantQt助手的語言類QtDesignerQt設(shè)計器的擴展類QtUiTools生成動態(tài)GUI類QtTest單元測試工具類2627Qt編程特點初始化在Qt應(yīng)用程序中,首先要創(chuàng)建一個QApplication對象,QApplication類負責(zé)圖形用戶界面應(yīng)用程序的控制流和主設(shè)置,在main.cpp中定義如下:
int
main(int
argc,char**argv){
QApplication
a(argc,argv); …… }
281.初始化QApplication包含在main()函數(shù)的事件循環(huán)體中,對所有來自Window系統(tǒng)和其它源文件的事件進行處理和調(diào)度,還包括處理應(yīng)用程序的初始化和結(jié)束,并且提供會話管理。在Qt應(yīng)用程序中,不管有多少個窗口,QApplication對象只能有一個,而且必須在其他對象之前創(chuàng)建。QApplication類中封裝了很多函數(shù),其中包括:系統(tǒng)設(shè)置:setFont()用來設(shè)置字體事件處理:sendEvent()用來發(fā)送事件
GUI風(fēng)格:setStyles()設(shè)置圖形用戶界面的風(fēng)格
顏色使用:colorSpec()用來返回顏色文件
文本處理:translate()用來處理文本信息
創(chuàng)建組件:setmainWidget()用來設(shè)置窗口的主組件
……292.窗口的創(chuàng)建 在Qt程序中,創(chuàng)建窗口比較簡單,只要在main.cpp文件中為ApplicationWindow建立一個指針:ApplicationWindow*mw=newApplicatonWindow();ApplicationWindow是在Application.h中定義的類,它是一個QmainWindow的繼承類組件的創(chuàng)建需要調(diào)用相應(yīng)組件的類,并在頭文件中包含此類的頭文件或者創(chuàng)建自定義類,繼承以后組件類的功能#include“qpushbutton.h”3.組件的創(chuàng)建303.組件的創(chuàng)建
classhello::public
Qwidget {
…… }
hello類繼承了Qwidget類的特征,并加入了自定義的特征功能,同樣需要在頭文件中包含此類的頭文件 在main.cpp的函數(shù)中需要創(chuàng)建hello類的實例,或創(chuàng)建QPushButton類的實例,才可以使用
helloh(string);
QPushButtonhello(“Hello,world!”,0);
如果組件本身可以作為主窗口,則無需設(shè)置主窗口。在上例中,下壓按鈕創(chuàng)建時其構(gòu)造函數(shù)中的第二個參數(shù)為0,表示按鈕所在窗口為主窗口,不需要設(shè)置主窗口。否則需要調(diào)用QWidget成員函數(shù)setMainWidget()來進行設(shè)置31窗體(Qwidget)Qt擁有豐富的滿足不同需求的窗體(按鈕,滾動條等等),Qt的窗體使用起來很靈活,為了滿足特別的要求,它很容易就可以被子類化。窗體是Qwidget類或它子類的實例,客戶自己的窗體類需要從Qwidget它的子類繼承。323.組件的創(chuàng)建
h.setMainWidget(&h);//將m設(shè)為當(dāng)前窗口
組件創(chuàng)建時一般是不可見的,這樣的好處在于避免大量組件創(chuàng)建時造成的屏幕閃爍現(xiàn)象,要使組件可見需要調(diào)用QWidget類的成員函數(shù)show()來顯示組件
h.show();
在X程序中,敲擊鍵盤,鼠標(biāo)指針在窗口中的移動或鼠標(biāo)按鍵動作等,都是事件
在Xt中提供了提供了一種叫做回調(diào)的事件處理方式。它通過翻譯表,將事件映射為相應(yīng)的動作,當(dāng)組件得到事件通知,就去表中找出相應(yīng)的動作例程進行處理。這種機制需要應(yīng)用程序注冊有關(guān)組件的回調(diào)函數(shù)或普通的事件處理函數(shù),以分發(fā)循環(huán)Xt的事件4.事件33
Qt事件的處理過程:QApplication的事件循環(huán)體從事件隊列中拾取本地窗口系統(tǒng)事件或其他事件,譯成QEvent(),并送給QObject::event(),最后送給QWidget::event()本別對事件處理4.事件QApplicationQWidget::event()
QEventQObject::event()Y
等待事件讀取事件檢查事件類型處理事件退出事件處理循環(huán)事件處理循環(huán)部分N344.事件
其實在Qt程序中,事件處理的方式也是回調(diào),但與以往所不同的是,事件的發(fā)出和接收采用了信號(signal)和插槽(slot)機制,無須調(diào)用翻譯表。利用信號和插槽進行對象間的通信是Qt的最主要特征之一 當(dāng)對象狀態(tài)發(fā)生改變的時候,發(fā)出signal通知所有的slot接收signal,盡管它并不知道哪些函數(shù)定義了slot,而slot也同樣不知道要接收怎樣的signal signal和slot機制真正實現(xiàn)了封裝的概念,slot除了接收signal之外和其它的成員函數(shù)沒有什么不同,而且signal和slot之間也不是一一對應(yīng)的。35Signal和Slot的聲明(一)
在Qt程序設(shè)計中,凡是包含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的發(fā)出一般在事件的處理函數(shù)中,利用emit發(fā)出signal,在下面的例子中在在事件處理結(jié)束后發(fā)出signalvoidStudent::setMark(int
newMark){if(newMark!=myMark){
myMark=newMark;
emitmarkChanged(myMark);}}37Signal和Slot的連接(一) 在signal和slot聲明以后,需要使用connect()函數(shù)將它們連接起來。connect()函數(shù)屬于QObject類的成員函數(shù),它能夠連接signal和slot,也可以用來連接signal和signal函數(shù)原形如下:bool
connect(const
QObject
*
sender,const
char
*
signal, const
QObject
*
receiver,const
char
*
member)
其中第一個和第三個參數(shù)分別指出signal和slot是屬于那個對象或組件
將信號發(fā)送者sender對象中的信號signal與接受者receiver中的member槽函數(shù)聯(lián)系起來。
38Signal和Slot的連接(二) 在使用connect()函數(shù)進行來接的時候,還需要用到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退出事件程序退出事件程序,只需要在程序結(jié)束時返回一個exec(),例如: returna.exec();其中a為QApplication的實例,當(dāng)調(diào)用exec()將進入主事件的循環(huán)中,直到exit()被調(diào)用或主窗口部件被銷毀43整個Qt應(yīng)用程序的執(zhí)行過程初始化處理事件結(jié)束Qt應(yīng)用程序Qt庫請求隊列事件隊列Xserver設(shè)備相關(guān)層計算機鍵盤鼠標(biāo)屏幕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創(chuàng)建鏈接
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水平布局管理器
創(chuàng)建一個窗體并排擺放一個按鈕一個標(biāo)簽,使他們能夠隨著窗體的水平縮放而縮放實現(xiàn)這個功能需要使用布局管理器中的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)
創(chuàng)建帶有父對象及其名字的對象,對象的父對象可以看作為這個對象的所有者。比如,對話框是其中的ok和cancel按鈕的父對象。
在上面的函數(shù)中如果parent為0則構(gòu)造一個無父的對象,如果對象是一個組件,則它就會成為頂層的敞口。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類(二)
//構(gòu)造初始化一個Mandelbrot對象
Mandelbrot::Mandelbrot(QObject*parent=0,constchar*name) :QObject(parent,name) {
connect(&timer,SIGNAL(timeout()),SLOT(calculate()));
……
{573個主要的基類2.QApplication
QApplication類負責(zé)GUI應(yīng)用程序的控制流和主要的設(shè)置,它包括主事件循環(huán)體,負責(zé)處理和調(diào)度所有來自窗口系統(tǒng)和其他資源的事件,并且處理應(yīng)用程序的開始、結(jié)束以及會話管理,還包括系統(tǒng)和應(yīng)用程序方面的設(shè)置。對于一個應(yīng)用程序來說,建立此類的對象是必不可少的
QApplication和QWidget都是QObject類的子類58函數(shù)分組系統(tǒng)設(shè)置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()。圖形用戶界面風(fēng)格
style()、setStyle()、polish()。顏色使用colorSpec()、setColorSpec()、qwsSetCustomColors()。文本處理setDefaultCodec()、installTranslator()、removeTranslator()、translate()。窗口部件mainWidget()、setMainWidget()、allWidgets()、topLevelWidgets()、desktop()、activePopupWidget()、activeModalWidget()、clipboard()、focusWidget()、winFocus()、activeWindow()、widgetAt()。高級光標(biāo)處理hasGlobalMouseTracking()、setGlobalMouseTracking()、overrideCursor()、setOverrideCursor()、restoreOverrideCursor()。X窗口系統(tǒng)同步flushX()、syncX()。對話管理isSessionRestored()、sessionId()、commitData()、saveState()。線程lock()、unlock()、locked()、tryLock()、wakeUpGuiThread()。雜項closeAllWindows()、startingUp()、closingDown()、type()。593個主要的基類3.
QWidget
QWidget類是所有用戶接口對象的基類,它繼承了QObject類的屬性。組件是用戶界面的單元組成部分,它接收鼠標(biāo)、鍵盤和其它從窗口系統(tǒng)來的事件,并把它自己繪制在盤屏幕上
QWidget類有很多成員函數(shù),但一般不直接使用,而是通過子類繼承來使用其函數(shù)功能。如,QPushButton、QlistBox等都是它的子類60窗體是Qwidget類或它子類的實例,客戶自己的窗體類需要從Qwidget它的子類繼承。61一個窗體可以包含任意數(shù)量的子窗體,子窗體可以顯示在父窗體的客戶區(qū),一個沒父窗體的窗體我們稱之為頂級窗體(一個“窗口”),一個窗體通常有一個邊框和標(biāo)題欄作為裝飾。Qt并未對一個窗體有什么限制,任何類型的窗體可以是頂級窗體,任何類型的窗體可以是別的窗體的子窗體。在父窗體顯示區(qū)域的子窗體的位置可以通過布局管理自動的進行設(shè)置,也可以人為的指定。當(dāng)父窗體無效,隱藏或被刪除后,它的子窗體都會進行同樣的動作。62上下文函數(shù)窗口函數(shù)show()、hide()、raise()、lower()、close()。頂級窗口caption()、setCaption()、icon()、setIcon()、iconText()、setIconText()、isActiveWindow()、setActiveWindow()、showMinimized()、showMaximized()、showFullScreen()、showNormal()。窗口內(nèi)容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()。鍵盤焦點函數(shù)isFocusEnabled()、setFocusPolicy()、focusPolicy()、hasFocus()、setFocus()、clearFocus()、setTabOrder()、setFocusProxy()。鼠標(biāo)和鍵盤捕獲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()。系統(tǒng)函數(shù)parentWidget()、topLevelWidget()、reparent()、polish()、winId()、find()、metric()。這是什么的幫助customWhatsThis()。內(nèi)部核心函數(shù)focusNextPrevChild()、wmapper()、clearWFlags()、getWFlags()、setWFlags()、testWFlags()。63主要的類描述抽象窗口部件類抽象窗口部件類是通過子類來使用的。高級窗口部件類高級的GUI窗口部件,比如列表視圖和進度條基本窗口部件類基本的GUI窗口部件,比如按鈕、組合框和滾動條數(shù)據(jù)庫類與數(shù)據(jù)庫相關(guān)的類,比如與SQL數(shù)據(jù)庫相關(guān)的類。日期與時間類處理日期與時間的類拖放類處理拖放和MIME類型的編碼和解碼類環(huán)境類提供了多樣全面的服務(wù),比如事件處理、系統(tǒng)設(shè)置訪問和國際化等
服務(wù)的類事件類用來生成和處理事件的類非GUI類非GUI類是一個集合類。比如:列表、隊列、堆棧和字符串,它們
不需要QApplication類就可以和其他類一起使用。多媒體、圖形和打印類該類主要提供支持圖形(2D、3D和OpenGL),圖像的編碼、解碼和處理,聲音,動畫,打印等等。幫助系統(tǒng)類用來給應(yīng)用程序提供在線幫助的類。布局管理類用來處理自動調(diào)整窗口部件的大小和位置,能夠構(gòu)成復(fù)雜對話框的類。共享類為了快速復(fù)制而使用引用計數(shù)的類。Qt系統(tǒng)的類Qt-
C++圖形用戶界面庫64Qt系統(tǒng)的類Qt-
C++圖形用戶界面庫主要的類描述輸入/輸出和網(wǎng)絡(luò)類提供文件輸入輸出,目錄和網(wǎng)絡(luò)操作。主窗口和相關(guān)類一切你所需要的典型現(xiàn)代主程序窗口,包括目錄、工具條、工作區(qū)等等。雜類各種各樣其他有用的類模塊/視圖類該類主要用于設(shè)計模塊/視圖平臺的類。對象模型Qt圖形用戶界面的工具包底層對象模型。組織者用戶接口組織者,比如:分隔器、TAB條、按鈕組等等。插件類插件相關(guān)類。標(biāo)準(zhǔn)對話框用于文件、字體、顏色選擇和更多的已經(jīng)做好的對話框。模板類Qt的模板庫容器類。文本相關(guān)類文本處理的類。(也可以參考XML類。)線程類提供線程支持的類。窗口外觀和風(fēng)格可以自定義風(fēng)格、字體、顏色等等外觀的類。XML類支持XML的類,例如:DOM和SAX。QtopiaCore類是QtopiaCore一個特殊的類(Qt的嵌入Linux)。65第二部分:QtDesigner66QtDesigner Qt應(yīng)用程序除了使用手工編寫代碼的方式外,還可以用過QtDesinger來完成,QtDesigner的功能十分強大,界面類似于我們常用的VB,而且還提供了大量可供編程使用的組件6768基于QtDesigner程序設(shè)計(一) 在使用QtDesigner程序開發(fā)時,一般要涉及到下面幾個步驟: 1.創(chuàng)建和初始化子部件 2.設(shè)置子部件布局 3.設(shè)置Tab鍵次序(不是必須)
4.建立信號與插槽的連接
69基于QtDesigner程序設(shè)計(二)1.創(chuàng)建并布置部件2.對部件使用布局管理3.建立信號與插槽的連接70基于QtDesigner程序設(shè)計(三)編輯兩個部件之間信號與插槽之間的連接方式71基于QtDesigner程序設(shè)計(四) QtDesigner下不同風(fēng)格的預(yù)覽72QtDesigner的工作過程QtDesigner將工程文件組織成.ui的文件由.ui文件生成.cpp
和.h文件.ui-----xmluic生成moc_filenaem.cppmoc73QTui文件介紹1.生成方式:QT通過QTdesigner可以生成ui文件(.ui&&.ui.h)
2.UI文件內(nèi)容:以XML方式記錄了QTdesigner生成的界面的相關(guān)內(nèi)容,大體可以分為如下內(nèi)容widget屬性,其內(nèi)容(圖形元素,layout。。)的相關(guān)屬性頭文件
變量槽函數(shù)3.通過UIC(userinterfacecompiler)可以把UI文件內(nèi)容翻譯成標(biāo)準(zhǔn).h,.cpp文件
74QtDesigner功能框圖75子類繼承方式(Qt2.X)76第三部分:Qt開發(fā)環(huán)境的建立77建立Qt/Embedded開發(fā)環(huán)境(一) 在我們嵌入式開發(fā)中Qt提供了使用在小型嵌入式設(shè)備上的輕量級的工具包Qt/Embedded(Qt/E),要使用Qt/E需要和Qt/X11以及tmake工具進行配合,我們可以在Trolltech公司的ftp站點下載到這些工具包的源代碼ftp:///qt/source/
這里列出這些工具包的一個可用的組合Qt/Embedded2.3.10Qt2.3.2forX11tmake1.13
XWindow系統(tǒng)(X11或X)是一種位圖顯示的視窗系統(tǒng)。它是在Unix和類Unix操作系統(tǒng),以及OpenVMS上建立圖形用戶界面的標(biāo)準(zhǔn)工具包和協(xié)議
78建立Qt/Embedded開發(fā)環(huán)境(二)解壓縮并設(shè)置環(huán)境變量安裝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開發(fā)環(huán)境(三) 編譯Qt/Embedded庫的時候需要注意,我們通常是要將庫源碼編譯兩次。一次是為了使我們的程序能夠在pc機上顯示出來而編譯的為pc機上的程序使用的Qt/E庫;另一次是編譯在開發(fā)板上使用的庫,是為開發(fā)板上的應(yīng)用程序準(zhǔn)備的庫文件
以編譯pc機上的Qt/E庫為例,編譯Qt/E的過程主要分為三步,分別是編譯Qt2.3.2,編譯qvfb,編譯Qt/Embedded2.3.1080建立Qt/Embedded開發(fā)環(huán)境(四)編譯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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 承包草地合同(2篇)
- 2025年度數(shù)據(jù)中心農(nóng)民工用工合同4篇
- 二手房交易法律合同模板2024一
- 2025年度個人貸款合同風(fēng)險評估與管理規(guī)范4篇
- 二零二五年度國際貨物保險合同條款及理賠細則3篇
- 2025年度臨時臨時臨時停車場租賃合同2篇
- 2025年度個人股權(quán)分割及轉(zhuǎn)讓合同3篇
- 個人與個人2024年度汽車租賃合同3篇
- 二零二五年度寧波勞動合同模板:包含員工勞動合同變更條款
- 二零二五年度外匯借款合同風(fēng)險防范與應(yīng)對策略
- 2024年資格考試-對外漢語教師資格證筆試參考題庫含答案
- 軟件研發(fā)安全管理制度
- 三位數(shù)除以兩位數(shù)-豎式運算300題
- 寺院消防安全培訓(xùn)課件
- 比摩阻-管徑-流量計算公式
- GB/T 42430-2023血液、尿液中乙醇、甲醇、正丙醇、丙酮、異丙醇和正丁醇檢驗
- 五年級數(shù)學(xué)應(yīng)用題100道
- 西方經(jīng)濟學(xué)(第二版)完整整套課件(馬工程)
- 高三開學(xué)收心班會課件
- GB/T 33688-2017選煤磁選設(shè)備工藝效果評定方法
- 科技計劃項目申報培訓(xùn)
評論
0/150
提交評論