版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、图形用户界面QT 第四章,本章计划,可视对象的返回值和数据 鼠标,键盘,定时器等事件的捕捉 一些事件的虚函数重载 ,信号从基类转发 掌握QDialog, QTimer, QTime 掌握QSettings, QSqlDatabase 了解Qt NetWork 掌握QGraphicsView, QGraphicsScene 掌握QGraphicsItem, QPixmap,计算器里的关于窗口,上面有2个按钮,确定和取消,QMainWindow怎么知道你按了哪一个呢? 首先,那个是一个按钮组buttonBox,是QDialog组件里就关联好信号的。在 信号和槽编辑器里能看的到。我们可以看看QDia
2、log的槽accept()和rejecct()起什么作用,看HELP文档,可视对象的返回值和数据,QDialog的槽accept()和rejecct(),HELP文档里是这么解释的,看懂了吗? void QDialog:accept ()virtual slot Hides the modal dialog and sets the result code toAccepted. void QDialog:reject ()virtual slot Hides the modal dialog and sets the result code toRejected. void QDialog:
3、accepted ()signal This signal is emitted when the dialog has been accepted either by the user or by callingaccept() ordone() with theQDialog:Acceptedargument.,QDialog的返回值,跟据HELP文档,我们可以这样写代码,鼠标,键盘,定时器等事件的捕捉,事件在Qt里分很多种,比如鼠标,键盘,定时器,窗体扩大缩小,有鼠标飘过,有数值变化等等,任何一个小动作,在GUI里都会触发某种事件。当事件产生时,怎么来进行处理呢? 跟据C+的语言特性,虚
4、函数重载可以解决这个问题,所有可以处理的事件,一定都是虚函数。 现在我们来做一个close事件处理。,close事件的捕捉,还记得第一个例子吗,一个按钮一按就关闭窗口了。 当然按右上角的X,也可以关闭,但有的窗口按了右上角的X会跳出一个框来。 这个是通过重载 关闭事件而处理出的一个框,怎么做呢?,QMainWindow的close事件在哪?,刚刚讲过,所有能处理的事件,一定是虚函数,那虚函数去哪找?去protected里找。 现在我们要关闭的是QMainWindow,并且要它跳出那个框出来,怎么找相应事件呢?来查下HELP文档,QMainWindow的close事件在哪?,点不出来吧?为啥?因
5、为QMainWindow没有,那怎么查?去找它的基类,它一定是从基类里继承了所有的事件。 点进Qwidget这个基类以后,再点Protected Funtions,QMainWindow的close事件在哪?,找到close事件了 点进看去说明和例子,By default, the event is accepted and the widget is closed. You can reimplement this function to change the way the widget responds to window close requests. For example, you
6、 can prevent the window from closing by calling ignore()on all events. 你看不懂可以复制查google百度有道翻译就对了。 要还在发呆,就是你的不对了。,重载基类的虚函数的代码怎么写,1. 想想C+语法,派生类怎么去重载基类的虚函数 把声明抄过来,.cpp的重载代码怎么写?,C语言就强调了,用谁的东西,就include谁的头文件 一按X就重载了close事件,在这里我们用QMessageBox速生成了一个小框,然后取它的返回值看你按了什么键,如果按的取消,据据QMainWindow的HELP文档用ignore()接口忽略cl
7、ose事件,中文显示的处理,#include int main(int argc, char *argv) QApplication a(argc, argv); QTextCodec *codec = QTextCodec:codecForName(GB2312); QTextCodec:setCodecForLocale(codec); QTextCodec:setCodecForCStrings(codec); QTextCodec:setCodecForTr(codec); MainWindow w; w.show(); return a.exec(); ,一个窗口有多少种事件可以处理
8、呢?,看看HELP文档里的protected里有多少种事件 一定要学会查HELP文档,查google翻译 现在我们小试了中间的一个close事件,其它的事件后续会有介绍,,来做一个定时器,我们需要用到QTimer这个类, 查HELP文档 QTimer是个什么类,查接口,信号,槽,和例子,QTimer定时器,你可以先从Detailed Description示例开始看 QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout(), this, SLOT(update(); timer-start(1000); 看到这个例子代码
9、,基本知道怎么用这个定时器了 定时器对象需要生成; 定时器用start()启动,有2个重载,带形参的是毫秒间隙时间; 定时器启动以后,每隔间隙时间发来一个timeout()信号, 你可以去连接一个你的槽来处理。,练习 做定时器,要求: 1. 按start就开始一秒一秒的计时 2. 按pause就暂停显示,但背地里还在计时,再按pause就显示实际的时间 按stop就停,再按一次就清零 按X退出时,要有对话框 有帮助-关于 QDialog, 上面写上 XXX 几几年几几月几日制做,版本V0.1,对Qt的几点总结和感悟,做了一些GUI程序以后,我们总结一下 Qt只是提供一些GUI的显示,和一些功能
10、类, 对象与对象,对象与GUI的逻辑关联,和Qt没有关系 Qt提供数据传输和通道方案 逻辑关系完全是由C结构实现 Qt对象有什么功能,怎么和其它对象连接,要多查HELP文档 你体会出来了吗?,Qt GUI巩固练习 电子钟,做一个电子钟,24小时制显示 时:分:钞 时分钞中的 : 需要一秒一闪 当按日期按钮时,需要变成日期显示 日期格式 年-月-日 日期显示完5秒后,又变回时间显示 查HELP里QTime时间类的使用, 显示用QLCDnumber类 注意逻辑是C语法才能实现,Qt 的一些其它类 QGraphicsView,QGraphicsView 动态2D显示容器 查看一下HELP里它的Det
11、ailed Description QGraphicsView提供了一个界面,它既可以管理大数量的定制2D items,又可与它们交互,有一个view widget可以把这些项绘制出来,并支持旋转与缩放。这个柜架也包含一个事件传播结构,对于在scene中的这些items,它具有双精度的交互能力。Items能处理键盘事件,鼠标的按,移动、释放、双击事件,也可以跟踪鼠标移动。 整个框架是这样的 QGraphicsView 容器 - QGraphicsScene 场景 - QGraphicsItem 图元,Qt 的一些其它类 QGraphicsView,QGraphicsView 里包含了 QGra
12、phicsScene 而 QGraphicsScene 拥有多个图元,包含三层:背景层,图元层,前景层 QGraphicsItem 图元 支持鼠标事件, 滚轮事件, 上下文菜单事件支持键盘输入焦点, 按键事件支持拖放支持分组,Qt 的一些其它类 QGraphicsView,QGraphicsItem图元类,只是一个虚基类,有8种不同的派生类. QGraphicsEllipseItem 椭圆图元 QGraphicsLineItem线图元 QGraphicsPathItem曲线图元 QGraphicsPixmapItem像素图元 QGraphicsPolygonItem多边形图元 QGraphic
13、sRectItem矩形图元 QGraphicsSimpleTextItem文本标签图元 QGraphicsTextItem 文本浏览器图元,Qt 的一些其它类 QGraphicsView,我们以QGraphicsPixmapItem像素图元为例,介绍框架的连接 QGraphicsPixmapItem像素图元,也就是拿一张图片来显示图元 程序框架如下 QMainWindow - QGraphicsView 容器 - QGraphicsScene 场景 - QGraphicsPixmapItem像素图元,Qt 的一些其它类 QGraphicsView,QMainWindow 和 QGraphics
14、View 怎么连接,画上去就可以了 拖过去, 大约拉大一点。,View容器 场景 像素图元,QGraphicsView 容器 - QGraphicsScene 场景 - QGraphicsPixmapItem像素图元 场影 和 图元怎么连接 View呢? 场影 和 图元 在这里每个类需要派生一个自已改造的类,为此我们要建 .h和.cpp 场景 我们建 myScene 图元 我们建 myItem,建 场景,1 3 2 4,建 图元,用同样的方法建图元, 并且是 像素图元 注意,这里的类型信息没有继承自QObject QGraphicsPixmapItem 的基类是QGraphicsItem, 但
15、是QGraphicsItem并没有继承自QObject, 这意味着QGraphicsPixmapItem不能使用 信号和槽 通信,View容器-场景-像素图元,QGraphicsView 容器 - QGraphicsScene 场景 - QGraphicsPixmapItem像素图元 查HELP文档View的Detailed Description有一个例子,是用对象构造的方法来加入了scene的关连 QGraphicsView view(,View容器-场景,在mainwindow.h里包含myscene.h头文件,创建一个对象,调用setScene接口和View关连,场景-像素图元,QGr
16、aphicsScene 场景 - QGraphicsPixmapItem像素图元 查HELP文档QGraphicsScene找关连Item的接口,查add, set之类的关键词 找到void addItem ( QGraphicsItem * item ); 先不管空间泄露 总之已经关连了,2D QGraphicsView,OK, 我们完成了 2D图形的程序框架如下 QMainWindow - QGraphicsView 容器 - QGraphicsScene 场景 - QGraphicsPixmapItem像素图元 到此程序编译成功,可以运行,但是一片空白。 为啥? 因为item并没有贴上像
17、素,也就是没有贴图片 GUI也就是在绘图,或是显示图片 现在我们给Item贴上图片,QGraphicsPixmapItem像素图元 贴图,QGraphicsPixmapItem像素图元 查HELP文档QGraphicsPixmapItem找相关贴图的接口,还是找add, set, Pixmap相关的单词, 英语不好的童鞋好好查友道词典,不要发呆,不要等别人现成的答案。,QGraphicsPixmapItem像素图元 贴图,找到void setPixmap ( const QPixmap 形参需要一个QPixmap 的类,继续看QPixmap Format格式支持里,支持BMP GIF JPG
18、PNG等很多的图片格式,但是原生只支持BMP和PNG,但其它的格式都通过了插件的模式支持了。 怎么把图片的格式转换成QPixmap呢?找接口。 图片是一个文件, 一个filename ,就找filename 相关 QPixmap ( const QString 还记得怎么重载虚函数不?,鼠标事件响应,点了以后,让他变张图 运行一下试试看,变了没,鼠标事件响应 左右键区分 双键,查HELP文档看形参上的QGraphicsSceneMouseEvent 是个什么样的类 button() 和 buttons() 2个接口用来返回你点了什么键 注意它们的返回值,是宏定义 Qt:MouseButton,再去查是什么样的东西.,鼠标事件响应 左右键区分 双键,首先你要用QGraphicsSceneMouseEvent的对象,头文件不要忘了 左+右 双键一点点 换 start.png, 只是左键就换lose.png, 运行一下试试,文件名别打错,怎样显示多个图片呢?,多生成几个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- MRS2496-生命科学试剂-MCE
- 全民禁毒宣传月实施方案
- 安全生产法宣传方案
- 大型排涝泵站管理制度
- 机械起重机课程设计
- 神经外科系列课程设计
- 硅基新材料绿色循环产业园项目可行性研究报告
- 克劳斯课程设计
- 计算方法课程设计评语
- GPS监控人员岗位职责及管理制度
- 论文范文浅谈儿童自闭症
- 城市公园管理养护中的难点、重点与建议
- 必看!设备管理必须要懂的一、二、三、四、五
- 空冷岛专题(控制方案、谐波及变压器容量选择)
- 三角函数的图像与性质复习课件
- 初一英语自我介绍PPT课件
- 液氧汽化站安全技术操作规程2018-07.docx
- 督学与校长应彼此“亦师亦友”
- 肺癌的术前后护理案例分析
- 模具专业英文术语大全
- 新教科版(2017版)五年级上册科学 期中测试卷
评论
0/150
提交评论