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

提交评论