Qt编程培训(课堂PPT)_第1页
Qt编程培训(课堂PPT)_第2页
Qt编程培训(课堂PPT)_第3页
Qt编程培训(课堂PPT)_第4页
Qt编程培训(课堂PPT)_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1讲义纲要讲义纲要pQtopia集成开发环境搭建集成开发环境搭建p基础窗口部件基础窗口部件Qwidgetp信号和槽信号和槽p事件处理事件处理2Qt概念概念pQt是挪威Trolltech公司的旗舰产品,作为跨平台开发框架,是开源KDE桌面的基石.pGoogle Earch,Skype,Opera,Adobe Photoshop Element等著名软件都是基于Qt编写的.目前Qt最新版本为4.3.4p和java的”一次编写到处运行”所不同的是,Qt是源代码级的跨平台一次编写到处编译.一次开发的Qt应用程序可以移值到不同平台.目前Qt支持的平台有:Mac,Windows NT/2000/XP/Vi

2、sta,unix,linux,嵌入式linux3Qt和和Qtopia之间的关系之间的关系pQt泛指Qt的所有桌面版本,比如Qt/X11,Qt Windows,Qt Mac等。由于Qt最早是在Linux中随着KDE流行开来的,因此通常很多人说的Qt都指用于Linux/Unix的Qt/X11。p Qt/E(Qt/Embedded)是用于嵌入式Linux系统的Qt版本。Qt/E去掉了X Lib的依赖而直接工作于Frame Buffer上,因而效率更高,但它并不是Qt的子集,而应该是超集,部分机制(如QCOP等)不能用于Qt/X11中。pQtopia是一个构建于Qt/E之上的类似桌面系统的应用环境。相

3、比之下,Qt/E是基础类库。pQtopia Core:就是原来的Qt/E,大概从Qt 4开始改名,把Qtopia Core并到Qtopia的产品线中去了。但实际上Qtopia Core就相当于原来的Qt/E,仍然作为基础类库。4Qtopia安装安装p从网站上下载的qt文件qtopia-2.2.0.tar.gz,拷贝到一个单独目录中.推荐放在opt目录下单独解压tar -zxvf qtopia-2.2.0.tar.gzp建立两个目录arm_qtopia和x86_qtopia目录把源码分别解压到两个目录中,后面我们会对其分别编译出x86仿真版和arm交叉编译版本pqtpioa安装之前需要下载3个补

4、丁包并安装后才能正确编译5Qtopia安装安装p编译Qt库,并且连编实例程序、教程和工具(比如Qt设计器),就像下面这样 在解压目录中输入 ./configure -qte -embedded -no-xft -qconfig qpe -depths 16,32 -system-jpeg -qt-zlib -qt-libpng -gif -no-g+-exceptions -no-qvfb -xplatform linux-arm-g+ -tslib -qpe edition pda -displaysize 240 x320 -fontfamilies helvetica fixed mic

5、ro smallsmooth smoothtimes unifont -xplatform linux-arm-g+ -luuid -qt2 -no-opengl -no-xft -dqt -no-xft -thread该命令会自动检测你目前linux操作系统具体配置情况 执行make命令生成qt和qtopia。 执行make install系统会把编译好的所有库文件拷贝到$QPEDIR/image目录下p在你主机中创建如下脚本文件中设置一些环境变量如下 export QTDIR=/opt/qte/arm_qtopia/qtopia2.2.0/qt2 export QPEDIR = /opt/

6、qte/arm_qtopia/qtopia2.2.0/qtopia export PATH=$QTDIR/bin:$QPEDIR/bin:$PATH export QMAKESPEC= $QPEDIR/mkspecs/qws/linux-arm-g+ export HOME=opt/qte/arm_qtopia/qtopia2.2.0/image/root export LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib:$LD_LIBRARY_PATH 6有关有关Qt环境变量环境变量pQMAKESPEC:这个必须设置为你所使用的系统的平台和编译器的组合。举例来说,加

7、入你使用的是Windows和Microsoft Visual Studio,你应该把环境变量设置为win32-msvc。如果你使用Solaris和g+,你应该把环境变量设置solaris-g+。pQTDIR:这个必须设置到Qt被(或者将被)安装到的地方。比如,/opt/qte/arm_qtopia/qtopia2.2.0/qt2一旦环境变量被设置到qmake目录,$QTDIR/qmakepQPEDIR:这设置为Qtopia的实际安装目录7Qt主要开发工具主要开发工具pKdevelopt IDEKDelvelopt 是Linux下开源IDE,目前最新版本为3.5.3,它的优点是专门为linux下

8、编写c+的开发工具有速度快易调试等特点.但是没有代码职能感知功能pEclipse + C+Developt Tool(CDT)+qt插件Eclipse是java开发的IDE工具.它能够通过插件方式支持多种语言如:c+,java,c.要运行Eclipse必须先安装jre.具有代码智能感知功能pQdevelopt IDEQDevelop是专门用于Qt4开发的IDE环境。QDevelop基于Qt4核心,需要安装gcc编译器(windows为MinGW),还需要gdb提供调试功能和ctags实现代码补全功能。QDevelop目前支持英语、法语、德语、荷兰语、波兰语、西班牙语、中文、俄语、意大利语和乌克

9、兰语。QDevelop是和Kdevelop无关的项目。它主要专注于提供Qt的IDE开发环境。虽然还不完善,但是发展很快,并且跨平台。QDevelop和KDevelop具有完全不同的源代码。8Qt体系架构体系架构pQt的整个设计都是以单根继承为主这跟java相同.所谓单根继承就是说所有的Qt类都有一个共同的祖先都是QObject类pQObject类后面有三个大的子类分别负责不同的功能它们是: QApplicaton:类管理图形用户界面应用程序和控制台程序的控制流和主要设置 QWidget:是所有用户界面对象的基类,负责管理图形界面 QLayout:负责管理所有图形界面的摆放方式9qmake工程文

10、件工程文件p工程文件里包含了qmake建立你的应用程序(或者库,插件)所需要的所有信息。你的工程所需的资源通常通过一系列的声明语句来描述,而简单的控制结构,可以实现在不同的平台和环境下,执行不同的编译流程。pqmake工程文件是以.pro为扩展名10qmake概述概述pqmake是Trolltech公司创建的用来为不同的平台和编译器书写Makefile的工具。p手写 Makefile是比较困难并且容易出错的,尤其是需要给不同的平台和编译器组合写几个Makefile。使用qmake会注意所有的编译器和平台的依赖性,可以把开发者解放出来只关心他们的代码。 Trolltech公司使用qmake作为Q

11、t库和Qt所提供的工具的主要连编工具.当Qt被连编的时候,默认情况下qmake也会被连编。pqmake使用储存在项目(.pro)文件中的信息来决定Makefile文件中该生成什么。11qmake工程文件示例工程文件示例TEMPLATE = appTARGET =Hello world DEPENDPATH += .INCLUDEPATH += .SOURCES += hello.cppHEADERS+ = hello.hFORMS += charGame.ui test_dynmaic.uiCONFIG += qt warn_on releaseCONFIG += qt debugCONFIG

12、+= qt thread debug12pro文件解释文件解释pTEMPLATE: 表示最终生成得目标文件类型app表示,最终生成得可执行文件pTARGET:目标名称是自动设置的,它被设置为和项目文件一样的名称,但是为了适合平台所需要的后缀。DEPENDPATH:应用程序所依赖的搜索路径pINCLUDEPATH:应用程序所需的额外的包含路径的列表pSOURCES:应用程序得源代码pHEADERS:应用程序用到的头文件pFORMS:应用程序用到的ui窗体文件pCONFIG: 包含Qt连接编译得一些配置信息包括: qt warn_on :编译器会输出尽可能多的警告信息 qt warn_off :编

13、译器会输出尽可能少的警告信息 qt debug:应用程序将以debug模式连编。 qt thread debug :连编为一个可调试的多线程的应用程序13Qt2包含的模块包含的模块pQtCore 和图形无关的核心模块pQtGui 所有的图形模块pQtNetWork 网络相关的模块pQtOpenGL 支持OpenGL pQtSql QT支持数据库开发模块pQtSvg定义和生成SVG类pQtXML读取XML文件模块pQtDesignerQt的图形界面设计pQtUiTool定义在应用程序中直接处理ui文件的类pQt3Support Qt3版本的支持pQtAssistant 定义和扩展Qt设计器的类1

14、4qmake命令命令p qmake可以根据实际文件自动生成相对应makefile文件,命令格式: qmake options files 15Qt体系架构图体系架构图16qmake编译编译Qt次序次序qmake工程文件(pro)qmake -projectqmakeMakefile文件p首先使用qmake project选项命令,根据当前源代码生成后缀名为pro的工程文件p其次再次调用qmake命令或者执行qmake o Makefile 自动生成Makefile文件17Qtopia添加线程支持添加线程支持p由于qtopia 2.2.0的makefile里的问题,现

15、在只能自己手动编译出支持thread的libqte-mt.so.* 进入qtopia-2.2.0-FriendlyARM/qt2目录手动配置来支持multi-thread 如果编译的是x86版本那么执行./configure -embedded -no-xft -qconfig qpe -depths 16,32 -system-jpeg -gif -thread 如果编译的是arm版本那么执行./configure -embedded -no-xft -qconfig qpe -depths 16,32 -system-jpeg -qt-zlib -qt-libpng -gif -no-g+

16、-exceptions -no-qvfb -xplatform linux-arm-g+ -tslib -thread 上面的步骤执行后会在当前目录下产生src-mt.mk文件,用编辑器将其内容的最后一行”cd src; $(MAKE) clean“删除或注释掉 编译libqte-mt:make src-mtp编译完成后将在qtopia-2.2.0- FriendlyARM/qtopia/lib目录下生成所期待的libqte-mt.so.*文件18Qt布局管理器布局管理器绝对位置方式绝对位置方式p这种方式是通过QWidge提供的setGeometry()函数来设置子窗口部件大小和在父窗口的位置

17、p但是绝对位置方式缺点是:如果父窗口大小发生改变,子窗口部件无法做出相应变化19setGeometry()函数函数p指定子部件在父窗体中所处的位置和大小void QWidget:setGeometry ( int x, int y, int w, int h ) 参数说明:x:表示子部件在父窗体行的位置y:表示子部件在父窗体列的位置w:表示子部件宽度h:表示子部件的高度20绝对位置示例绝对位置示例#include #include #include int main(int argc, char *argv) QApplication app(argc, argv); QWidget *wid

18、get=new QWidget;QLabel *label = new QLabel(Hello Qt!“,widget);label-setGeometry(10,10,20,20);widget-resize(300,300);widget-show(); return app.exec(); 21布局管理器类图布局管理器类图QObjectQGridLayoutQVBoxLayoutQBoxLayoutQHBoxLayoutQLayout22布局管理器常用方法布局管理器常用方法psetLayout函数:通过调用该函数设置窗口的布局模式 setLayout addWidget addColS

19、pacing setSpacing 23QHBoxLayout#include #include #include int main(int argc, char *argv) QApplication app(argc, argv); QWidget *window = new QWidget;QPushButton *button1=new QPushButton(“OK”);QPushButton *button2=new QPushButton(“cancel”); window-setWindowTitle(Enter Your Age); QHBoxLayout *layout =

20、 new QHBoxLayout; layout-addWidget(button1); layout-addWidget(button2); window-setLayout(layout); window-show(); return app.exec(); 24QVBoxLayout#include #include #include #include #include int main(int argc, char *argv) QApplication app(argc, argv);QWidget *window = new QWidget;window-setWindowTitl

21、e(QVBoxLayout);window-resize(240, 100);QLCDNumber *lcd = new QLCDNumber;QObject:connect(slider, SIGNAL(valueChanged(int), lcd, SLOT(display(int);QVBoxLayout *layout = new QVBoxLayout(window);layout-addWidget(lcd);layout-addWidget(slider);window-show();return app.exec();25QGridLayout#include #include

22、 #include int main(int argc, char *argv) QApplication app(argc, argv);QWidget *wm = new QWidget;QLabel *label;QGridLayout *grid = new QGridLayout(wm, 3, 3);grid-addColSpacing(0, 200);grid-addColSpacing(1, 100);label = new QLabel(one, wm);grid-addWidget(label, 0, 0);grid-addWidget(new QLabel(two, wm)

23、, 1, 0);label = new QLabel(three, wm);grid-addWidget(label, 2, 0);grid-addWidget(new QLabel(four, wm), 1, 1);label = new QLabel(five, wm);grid-addWidget(label, 2, 2);app.setMainWidget(wm);wm-show();return app.exec();26QDialog类类pQDialog类是对话框窗口的基类,对话框窗口是主要用于短期任务以及和用户进行简要通讯的顶级窗口,QDialog可以是模式的也可以是非模式的,Q

24、Dialog支持扩展性并且可以提供返回值,它们可以有默认按钮。 27对话框模式对话框模式p模式模式 对话框就是阻塞同一应用程序中其它可视窗口的输入,对话框用户必须完成这个对话框中的交互操作并且关闭了它之后才能访问应用程序中的其它任何窗口p非模式非模式 对话框是和同一个程序中其它窗口操作无关的对话框。在字处理软件中查找和替换对话框通常是非模式的来允许同时与应用程序主窗口和对话框进行交互。 28QMessageBox静态成员静态成员pStandardButton QMessageBox:critical ( QWidget * parent, const QString & caption

25、, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton ) 打开一个标题为caption并且文本为text的严重消息框。这个对话框最多有三个按钮。pint warning ( QWidget * parent, const QString & caption, const QString & text, int button0, int button1, int button2 = 0 ) 打开一个标题为caption并且文本为text的警

26、告消息框。这个对话框最多有三个按钮。pStandardButton information( QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton ) 打开一个标题为caption并且文本为text的信息消息框。这个对话框最多有三个按钮。29QDialog常用函数常用函数pexec函数 调用exec()来显示模式对话框。当用户关闭这个对话框,exec()将提供一个可用的

27、返回值并且这时流程控制继续从调用exec()的地方进行 paccept()槽 在使用模式对话框,隐藏模式对话框并且设置结果代码为Accepted。preject ()槽 隐藏模式对话框并且设置结果代码为Rejected。 pshow() 调用show()来显示非模式对话框,show()立即返回 30Qt信号和槽概述信号和槽概述p信号与槽作为QT的核心机制在QT编程中有着广泛的应用,本章介绍了信号与槽的一些基本概念、元对象工具以及在实际使用过程中应注意的一些问题。p信号和槽机制是QT的核心机制,要精通QT编程就必须对信号和槽有所了解。信号和槽是一种高级接口,应用于对象之间的通信,它是QT的核心特

28、性,也是QT区别于其它工具包的重要地方。信号和槽是QT自行定义的一种通信机制,它独立于标准的C/C+语言,因此要正确的处理信号和槽,必须借助一个称为 moc (Meta Object Compiler)的QT工具,该工具是一个C+预处理程序,它为高层次的事件处理自动生成所需要的附加代码。p在所有从 QObject或其子类(例如Qwidget)派生的类都能够包含信号和槽。当对象改变其状态时,信号就由该对象发射(emit)出去,这就是对象所要做的全部事情,它不知道另一端是谁在接收这个信号。这就是真正的信息封装,它确保对象被当作一个真正的软件组件来使用。槽用于接收信号,但它们是普通的对象成员函数。一

29、个槽并不知道是否有任何信号与自己相连接。而且,对象并不了解具体的通信机制。31信号和槽示意图信号和槽示意图32信号信号p当某个信号对其客户或所有者发生的内部状态发生改变,信号被一个对象发射。p只有定义过这个信号的类及其派生类能够发射这个信号。当一个信号被发射时,与其相关联的槽将被立刻执行,就象一个正常的函数调用一样。p信号-槽机制完全独立于任何GUI事件循环。p如果存在多个槽与某个信号相关联,那么,当这个信号被发射时,这些槽将会一个接一个地执行,但是它们执行的顺序将会是随机的、不确定的,我们不能人为地指定哪个先执行、哪 个后执行。33如何编写信号如何编写信号p信号的声明是在头文件中进行的,QT

30、的signals关键字指出进入了信号声明区,随后即可声明自己的信号。下面定义了三个信号:signals: void mySignal();void mySignal(int x);void mySignalParam(int x,int y);p在上面的定义中,signals是QT的关键字,而非C/C+的。接下来的一行void mySignal() 定义了信号mySignal,这个信号没有携带参数;接下来的一行void mySignal(int x)定义 了重名信号mySignal,但是它携带一个整形参数,这有点类似于C+中的虚函数。从形式上 讲信号的声明与普通的C+函数是一样的,但是信号却没

31、有函数体定义,另外,信号的返回类型都是void。34槽槽p槽是普通的C+成员函数,可以被正常调用,它们唯一的特殊性就是很多信号可以与其相关联。当与其关联的信号被发射时,这个槽就会被调用。槽可以有参数,但槽的参数不能有缺省值。p同普通的C+成员函数一样,槽函数也分为三种类型,即public slots、private slots和protected slots。p槽也能够声明为虚函数,这也是非常有用的。35槽函数类型槽函数类型ppublic slots:在这个区内声明的槽意味着任何对象都可将信号与之相连接。这对于组件编程非常有用,你可以创建彼此互不了解的对象,将它们的信号与槽进行连接以便信息能够

32、正确的传递。 pprotected slots:在这个区内声明的槽意味着当前类及其子类可以将信号与之相连接。这适用于那些槽,它们是类实现的一部分,但是其界面接口却面向外部。 pprivate slots:在这个区内声明的槽意味着只有类自己可以将信号与之相连接。这适用于联系非常紧密的类。 36如何编写槽如何编写槽p槽的声明也是在头文件中进行的。例如,下面声明了三个槽:public slots:void mySlot();void mySlot(int x);void mySignalParam(int x,int y);37QObject:connectp通过调用QObject对象的connec

33、t函数来将某个对象的信号与另外一个对象的槽函数相关联,这样当发射者发射信号时,接收者的槽函数将被调用,该函数的定义如下:bool QObject:connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * member ) static这个函数的作用就是将发射者sender对象中的信号signal与接收者receiver中的member槽函数联系起来。当指定信号 signal时必须使用QT的宏SIGNAL(),当指定槽函数时必须使用宏SLOT()。如果发射者与接收者属

34、于同一个对象的话,那么在connect 调用中接收者参数可以省略。38带有信号和槽的类带有信号和槽的类class TsignalApp:public QMainWindowQ_OBJECT/信号声明区signals: /声明信号mySignal()void mySignal();/声明信号mySignal(int)void mySignal(int x);/声明信号mySignalParam(int,int)void mySignalParam(int x,int y);/槽声明区public slots: /声明槽函数mySlot()void mySlot();/声明槽函数mySlot(in

35、t)void mySlot(int x);/声明槽函数mySignalParam (int,int)void mySignalParam(int x,int y);39一个信号与另一个信号相关联一个信号与另一个信号相关联class MyWidget : public QWidget public: MyWidget(); . signals: void aSignal(); . private: . QPushButton *aButton; ; MyWidget:MyWidget() aButton = new QPushButton( this ); connect( aButton, S

36、IGNAL(clicked(), SIGNAL(aSignal() ); 40信号和槽示例信号和槽示例p下面定义了两个对象:标签对象label和滚动条对象scroll,并将valueChanged()信号与标签对象的setNum()相关联,另外信号还携带了一个整形参数,这样标签总是显示滚动条所处位置的值。QLabel *label = new QLabel;QScrollBar *scroll = new QScrollBar;QObject:connect( scroll, SIGNAL(valueChanged(int), label, SLOT(setNum(int) );41QObje

37、ct:disconnectp当信号与槽没有必要继续保持关联时,我们可以使用disconnect函数来断开连接。 bool QObject:disconnect ( const QObject * sender, const char * signal, const Object * receiver, const char * member ) static 42信号和槽限制信号和槽限制类型宏不能被用于信号和槽的参数类型宏不能被用于信号和槽的参数 #ifdef ultrix #define SIGNEDNESS(a) unsigned a #else #define SIGNEDNESS(a)

38、 a #endif class Whatever : public QObject . signals: void someSignal(SIGNEDNESS(int);/错误错误 . ; 43信号和槽限制信号和槽限制构造函数不能用于信号部分和槽部分构造函数不能用于信号部分和槽部分class SomeClass : public QObject Q_OBJECT public slots: SomeClass( QObject *parent, const char *name ) : QObject( parent, name ) /错误错误. ; 44信号和槽限制信号和槽限制函数指针不能作

39、为信号或槽的参数函数指针不能作为信号或槽的参数class SomeClass : public QObject Q_OBJECT. public slots:void apply( void (*apply)(List *, void *), char * ); /错误错误; 45信号和槽限制信号和槽限制信号和槽不能被升级信号和槽不能被升级 QButtonGroup:buttonPressed()槽是保护的。 class Whatever : public QButtonGroup . public slots: void QButtonGroup:buttonPressed; / 错的 .

40、;46信号和槽限制信号和槽限制p如果一个信号与多个槽相联系的话,那么,当这个信号被发射时,与之相关的槽被激活的顺序将是随机的。p信号与槽不能有缺省参数。p信号与槽也不能携带模板类参数。p嵌套的类不能位于信号或槽区域内也不能有信号或者槽。p友元声明不能位于信号或者槽声明区内。47元对象工具元对象工具p元对象编译器moc(meta object compiler)对C+文件中的类声明进行分析并产生用于初始化元对象的C+代码,元对象包含全部信号和槽的名字以及指向这些函数的指针。p元对象代码是signal/slot机制所必须的。用moc产生的C+源文件必须与类实现一起进行编译和连接,或者用#inclu

41、de语句将其包含到类的源文件中。moc并不扩展#include或者#define宏定义,它只是简单的跳过所遇到的任何预处理指令。48moc编译编译pmoc元对象编译器的功能是把包含有信号和槽的源文件编译成特殊的文件名为moc_+实际源文件名称.它的具体使用格式如下:pmoc option moc mysingal.h -o moc_mysingal.hpoption包含如下参数:-o 把编译结果写到一个文件中而不是标志输出-p -p path 使元对象编译器生成的(如果有生成的)#include声明的文件名称中预先考虑到path/。 -q path 使元对象编译器在生成的文件中的qt #inc

42、lude文件的名称中预先考虑到path/。 49类声明位置类声明位置p类的声明放在一个头文件(类的声明放在一个头文件(.h文件文件)中)中 如果在上述的文件myclass.h中发现类的声明,元对象编译器的输出文件将会被放在一个叫moc_myclass.cpp的文件中。这个文件将会像通常情况一样被编译,作为对象文件的结果是moc_myclass.o p类的声明放在一个实现文件(类的声明放在一个实现文件(.cpp文件文件)中)中 如果上述的文件myclass.cpp中发现类的声明,元对象编译器的输出文件将会被放在一个叫myclass.moc的文件中。这个文件需要被实现文件包含(#include),

43、也就是说myclass.cpp需要包含下面这行 #include myclass.moc 放在所有的代码之后。 50事件机制事件机制pQt中定义的事件是一个从QEvent类继承下来的,它表示应用程序内部或者外部发生某些应用程序必须知道的事情p在Qt内部,Qt通过由函数QApplication:exec()函数启动的主事件循环从系统事件队列中抓取属于本程序事件并转化为QEvent对象51事件类图事件类图QEventQMouseEvent QFocusEventQObjectQKeyEventQPaintEventQMoveEventQResizeEvent52事件来源分类事件来源分类p基于事件如

44、何被产生与分发,可以把事件分为三类: Spontaneous 事件,由窗口系统产生,它们被放到系统队列中,通过事件循环逐个处理。 Posted 事件,由Qt或是应用程序产生,它们被Qt组成队列,再通过事件循环处理。 Sent 事件,由Qt或是应用程序产生,但它们被直接发送到目标对象。 53QEvent对象对象pQEvent对象是所有事件对象的基类,因此有必要了解该对象构成函数: enum Type 标识事件类型 Type type () const 调用该函数,返回事件发生事件的类型(该类型为枚举)54常用的事件类型常用的事件类型p通过调用QEvent:type函数可以返回具体事件类型,Qt已

45、经为具体的事件类型事先定义了: QEvent:MouseButtonPress - 鼠标按下,QMouseEvent。 QEvent:MouseButtonRelease - 鼠标抬起,QMouseEvent。 QEvent:MouseButtonDblClick - 鼠标再次按下 QEvent:MouseMove - 鼠标移动,QMouseEvent。 QEvent:Close - 窗口部件被关闭(永久性地) QCloseEvent。 QEvent:KeyPress - 键按下(举例,包括Shift)QKeyEvent。 QEvent:KeyRelease - 键抬起,QKeyEvent。

46、QEvent:FocusIn - 窗口部件获得键盘焦点,QFocusEvent。 QEvent:FocusOut - 窗口部件失去键盘焦点,QFocusEvent。 QEvent:Timer - 规则的定时器事件,QTimerEvent。 55常用的常用的Qt事件类事件类pQt为多数事件定义了特殊的类: QMouseEvent 鼠标事件 QKeyEvent 键盘事件 QResizeEvent窗体宿放事件 QPaintEvent 窗体重绘事件 QCloseEvent 窗体关闭事件 QFocusEvent 部件获得焦点事件56事件处理方法事件处理方法pQt提供了几种处理事件的方法: 重新实现特定的

47、事件处理器 重新实现QObject:event()函数 继承QApplication并重新实现notify()函数57实现特定的事件处理器实现特定的事件处理器p最常见的事件处理办法就是重载象mousePressEvent(), keyPressEvent(), paintEvent() 这样的特定事件处理函数. 以按键事件为例 58QKeyEvent对象对象pQKeyEvent对象是Qt的键盘事件的包装对象,我们也经常需要捕获键盘事件,下面是该对象主要成员函数: int key () const int ascii () const ButtonState state () const But

48、tonState stateAfter () const bool isAccepted () const QString text () const bool isAutoRepeat () const int count () const void accept () void ignore () 59Qt键盘常量键盘常量p为了方便程序员捕获特殊键,Qt已经对所有的键盘都进行了宏定义,下面列出常用的键值:键值键值含义含义Qt:Key_EscapeESC键Qt:Key_TabTab键Qt:Key_Backspace回退键Qt:Key_Enter回车键Qt:Key_Down向下键Qt:Key_Space空格键Qt:Key_F1F1键Qt:Key_Right向右键60QMouseEvent对象对象p在Qt系统中对所有鼠标事件都被封装为QMouseEvent对象,有必要了解下该对象成员函数 Qt:MouseButton button () const 返回发生鼠标事件时按下的鼠标按钮 const QPoint & globalPos () const 返回发生鼠标事件时,鼠标在屏幕上的位置指针 int globalX () const 返回发生鼠标事件时,鼠标在屏幕上x轴位置 int globa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论