第14章Qt图形界面程序设计_第1页
第14章Qt图形界面程序设计_第2页
第14章Qt图形界面程序设计_第3页
第14章Qt图形界面程序设计_第4页
第14章Qt图形界面程序设计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

2023年8月3日第14章Qt图形界面程序设计2023年8月3日主要内容Qt的作用Qt简介基本Qt程序示例项目文件利用qmake编译程序应用消息/槽的Qt程序示例程序结构界面布局程序编译2023年8月3日Qt的作用网络协议X客户端(应用程序)X工具包、Gtk+,QtXLibX客户端(应用程序)X工具包、Gtk+,QtXLibX服务器设备驱动程序Qt工具包在XWindow中的作用和Gtk+一样,是Xlib之上更高层的开发工具包,它们将底层的Xlib的API进行封装,提供更高级的接口,达到降低开发难度,提高开发效率的目的。

2023年8月3日Qt简介良好的可移植性:X11:即运行在XWindow的系统,包括linux、unix等;windows系统:包括windows95/98/Nt/2000/Xp/2003等;Macintosh系统:MaxOSX;嵌入式系统;辅助工具Qmake:简化编译过程QtAssist:定位帮助信息QtDesigner:辅助界面设计2023年8月3日Qt简介Qt的维护与许可制度不是由软件组织和基金会维护;由Nokia(Trolltech)国际化的公司维护;GeneralPublicLicense(GPL)、LGPL版本;双许可证(DualLicensing)的版本商业软件非商业软件2023年8月3日Qt简介界面元素的组织:以类继承的结构组织;基类:QWidget;事件与事件处理程序的关联:重载已有的事件处理程序;适合于已经存在的事件处理函数利用信号/槽的机制关联信号(事件)和信号对应的事件。信号(signal)是对象(类)向外界发送的任意消息、事件,不仅仅是界面元素产生的一般消息(鼠标、键盘等)。槽(slot)是可以接收消息的特殊函数。2023年8月3日Qt简介Qt的执行过程如图所示。Qt应用程序初始化之后,在Qt库的支持下响应相应的处理事件并且返回。2023年8月3日Qt简介该实现过程需要Qt最主要的三个基类:QObject类、QApplication类和QWidget类。QObjectQObject类是所有能够处理信号、槽和事件的Qt对象的基类,能够创建带有父对象及其名字的对象,对象的父对象可以看作该对象的所有者。QApplicationQApplication类负责GUI应用程序的控制流和主要设置。它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件,并且处理应用程序的开始、结束以及会话管理,还包括系统和应用程序方面的设置。QWidgetQWidget类是所有用户接口对象的基类,它继承了QObject类的属性。组件是用户界面的单元组成部分,它接收来自鼠标、键盘和其他窗口系统的事件,并且绘制到屏幕上。QWidget类有很多成员函数,但一般不直接使用,而是通过子类继承来使用其函数功能。例如,QPushButton、QlistBox等都是它的子类。2023年8月3日Qt简介在Qt程序中,事件处理采用了信号(signal)和槽(slot)机制。信号和槽机制的好处是不需要调用翻译表,节省资源。利用信号和槽进行对象间的通信是Qt最主要的特征之一。当对象状态发生改变的时候,发出signal通知所有的slot接收signal,尽管它并不知道哪些函数定义了slot,而slot也不知道要接收怎样的signal。signal和slot机制真正实现了封装的概念,但它们之间并不是一一对应的。

显然,由右图可知,同一个信号可以连接到多个槽,多个信号也可以连接到同一个槽之中。随时可以建立一个连接,或者取消一个连接。不过取消一个连接不是很常用,因为当一个对象被删除后,它所包含的连接都会被自动取消。2023年8月3日基本Qt程序程序运行效果组成:一个窗口一个字符串动作:运行显示窗口关闭退出2023年8月3日程序清单hello.cpp1#include<qapplication.h>头文件2#include<qlabel.h>头文件3intmain(intargc,char*argv[]){主函数4QApplicationapp(argc,argv);应用程序对象5QLabellabel("<i><b>HelloQt!</b><i>",0);标签对象6app.setMainWidget(&label);7label.show();显示标签窗口8returnapp.exec();启动程序9}2023年8月3日程序编译项目文件——项目文件格式:基本格式:变量名=值TEMPLATE=app含义:生成一个可执行文件其它取值:lib,subdirs,vcapp,vclib;1TEMPLATE=app2INCLUDEPATH+=.3CONFIG+=qtwarn_onrelease4SOURCES+=hello.cpp2023年8月3日程序编译含义:lib:生成库文件subdirs:生成某个目录下的编译指导文件;vcapp:生成vc++支持的可执行程序;vclib:生成vc++支持的库文件。INCLUDEPATH+=.含义:将当前目录增加到头文件的搜索路径中去CONFIG+=qtwarn_onrelease含义:将CONFIG变量的值增加三个字符串其它取值:qt:生成的目标是基于Qt库的应用程序或者程序库;debug:编译时打开调试信息;release:编译时进行代码优化;warn_on:编译时尽量多地报告警告信息;warn_off:编译时仅报告严重的警告信息;2023年8月3日程序编译程序编译查看文件生成Makefile查看结果编译查看结果2023年8月3日程序编译命令分析必需的命令:qmake:根据项目文件生成Makefilemake:根据生成的Makefile编译代码生成可执行文件——hello生成的文件:Makefile:指导make进行编译的文件hello.o:编译源文件得到的目标文件hello:将目标文件链接后得到的可执行文件程序运行:通过输入可执行文件名运行:./hello得到程序界面2023年8月3日使用信号/槽的Qt程序示例程序运行界面绿色:按钮(QPushButton)红色:LCD数码显示(QLCDNumber)蓝色:编辑框(QLineEdit,QMultiLineEdit)黄色:自定义界面元素(MyWidget)quitstartgolcdeditmeditMyWidget2023年8月3日使用信号/槽的Qt程序示例界面设计思路整个界面为一个界面元素;类型:MyWidget基类:QWidget其它元素组合在MyWidget上;界面元素:quitstartgolcdeditmedit界面布局——网格布局grid(QGridLayout)元素之间通过信号/槽进行通讯2023年8月3日使用信号/槽的Qt程序示例程序结构主函数:main()功能:启动消息循环,显示程序界面两个类:类:Puzzle功能:完成产生随机数,并进行判断类:MyWidget功能:定义并放置界面元素,接受用户输入;5个文件:main.cpp:定义主函数puzzle.h,puzzle.cpp:定义并实现类Puzzlemywidget.h,mywidget.cpp:定义并实现类MyWidget2023年8月3日使用信号/槽的Qt程序示例文件目录结构当前工作目录./main.cppmywidget/mywidget.cppmywidget.hpuzzle.cpppuzzle.h2023年8月3日类结构类Puzzle的结构符号含义:+:共有,public-:私有,private成员说明:answer:猜数字的答案;gen_answer():产生随机数答案;get_answer():返回答案值;judge():将用户的猜测和答案比较,得出比较结果;start():开始,调用过程产生答案;-intanswer-intgen_answer()+intjudge()+intget_answer()+voidstart()Puzzle2023年8月3日QWidgetMyWidget-quit,start,lcd,grid

-edit,go,medit

-count,guess

-puzzle

#closeEvent

-init(),finalize(),getAnswer(),

-showMsg()

closeSignal()+onStart()

+onGo()+onClose()

类结构类MyWidget结构符号含义:+、-、#:共有、私有、保护三角:继承关系红色:型号绿色:槽成员说明:quit、start、lcd、edit、go、medit:界面上的元素grid:网格布局count:用户猜测的次数guess:用户的猜测puzzle:对象,完成产生随机数,并判断的功能2023年8月3日类结构成员说明:closeEvent:重载基类的方法;init():游戏初始化;finalize():游戏结束的动作getAnswer():得到用户输入的答案showMsg():根据用户的猜测,给出提示信息onStart():用户点击start按钮的动作onGo():用户点击go按钮的动作onClose():用户点击关闭按钮的动作closeSignal():程序关闭时,产生的信号。2023年8月3日界面布局本例中为4行×3列的布局坐标编码方式和Gtk+略有不同2100123startquitlcdeditgomedit2023年8月3日界面布局向容器中放置界面元素的两个方法占据一个单元格

voidQGridLayout::addWidget(

QWidget*w,//欲放置的界面元素

introw,//行编号

intcol,//列编号

intalignment=0);//对齐方式占据多个单元格

voidQGridLayout::addMultiCellWidget(

QWidget*w,//欲放置的界面元素

intfromRow,//起始行编号

inttoRow,//终止行编号

intfromCol,//起始列编号

inttoCol,//终止列编号

intalignment=0);

2023年8月3日界面布局元素位置参数取值元素名称行起始行终止列起始列终止start00--quit01--go12--lcd02--edit1101medit23022023年8月3日项目文件增加的路径:目录:mywidget文件:mywidget目录下的头文件和cpp文件1TEMPLATE=app2DEPENDPATH+=mywidget3INCLUDEPATH+=.mywidget4CONFIG+=qtwarn_onrelease5HEADERS+=mywidget/mywidget.hmywidget/puzzle.h6S

温馨提示

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

评论

0/150

提交评论