资源描述
,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,Click to edit Master title style,图形用户界面,QT,第四章,图形用户界面QT 第四章,1,本章计划,可视对象的返回值和数据,鼠标,键盘,定时器等事件的捕捉,一些事件的虚函数重载,信号从基类转发,掌握,QDialog,QTimer,QTime,掌握,QSettings,QS,qlDatabase,了解,Qt NetWork,掌握,QGraphicsView,QGraphicsScene,掌握,QGraphicsItem,QPixmap,本章计划,2,计算器里的关于窗口,上面有,2,个按钮,确定和取消,,QMainWindow,怎么知道你按了哪一个呢?,首先,那个是一个按钮组,buttonBox,,是,QDialog,组件里就关联好信号的。在 信号和槽编辑器里能看的到。我们可以看看,QDialog,的槽,accept(),和,rejecct(),起什么作用,看,HELP,文档,可视对象的返回值和数据,计算器里的关于窗口上面有2个按钮,确定和取消,QMainWi,3,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:accepted()signal,This signal is emitted when the dialog has been accepted either by the user or by calling,accept,()or,done,()with the,QDialog:Accepted,argument.,QDialog的槽accept()和rejecct()HEL,4,QDialog,的返回值,跟据,HELP,文档,我们可以这样写代码,QDialog的返回值跟据HELP文档,我们可以这样写代码,5,鼠标,键盘,定时器等事件的捕捉,事件在,Qt,里分很多种,比如鼠标,键盘,定时器,窗体扩大缩小,有鼠标飘过,有数值变化等等,任何一个小动作,在,GUI,里都会触发某种事件。当事件产生时,怎么来进行处理呢?,跟据,C+,的语言特性,虚函数重载可以解决这个问题,所有可以处理的事件,一定都是虚函数。,现在我们来做一个,close,事件处理。,鼠标,键盘,定时器等事件的捕捉事件在Qt里分很多种,比如鼠标,6,close,事件的捕捉,还记得第一个例子吗,一个按钮一按就关闭窗口了。,当然按右上角的,X,,也可以关闭,但有的窗口按了右上角的,X,会跳出一个框来。,这个是通过重载 关闭事件而处理出的一个框,怎么做呢?,close事件的捕捉还记得第一个例子吗,一个按钮一按就关闭窗,7,QMainWindow,的,close,事件在哪?,刚刚讲过,所有能处理的事件,一定是虚函数,那虚函数去哪找?去,protected,里找。,现在我们要关闭的是,QMainWindow,,并且要它跳出那个框出来,怎么找相应事件呢?来查下,HELP,文档,QMainWindow的close事件在哪?刚刚讲过,所有能,8,QMainWindow,的,close,事件在哪?,点不出来吧?为啥?因为,QMainWindow,没有,那怎么查?去找它的基类,它一定是从基类里继承了所有的事件。,点进,Qwidget,这个基类以后,再点,Protected Funtions,QMainWindow的close事件在哪?点不出来吧?为,9,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 can prevent the window from closing by calling,ignore(),on all events.,你看不懂可以复制查,google,百度有道翻译就对了。,要还在发呆,就是你的不对了。,QMainWindow的close事件在哪?找到close事,10,重载基类的虚函数的代码怎么写,1.,想想,C+,语法,派生类怎么去重载基类的虚函数,把声明抄过来,重载基类的虚函数的代码怎么写1.想想C+语法,派生类怎么,11,.cpp,的重载代码怎么写?,C,语言就强调了,用谁的东西,就,include,谁的头文件,一按,X,就重载了,close,事件,在这里我们用,QMessageBox,速生成了一个小框,然后取它的返回值看你按了什么键,如果按的取消,据据,QMainWindow,的,HELP,文档用,ignore(),接口忽略,close,事件,.cpp的重载代码怎么写?C语言就强调了,用谁的东西,就in,12,中文显示的处理,#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();,中文显示的处理#include,13,一个窗口有多少种事件可以处理呢?,看看,HELP,文档里的,protected,里有多少种事件,一定要学会查,HELP,文档,查,google,翻译,现在我们小试了中间的一个,close,事件,其它的事件后续会有介绍,,一个窗口有多少种事件可以处理呢?看看HELP文档里的prot,14,来做一个定时器,我们需要用到,QTimer,这个类,,查,HELP,文档,QTimer,是个什么类,查接口,信号,槽,和例子,来做一个定时器我们需要用到QTimer这个类,,15,QTimer,定时器,你可以先从,Detailed Description,示例开始看,QTimer*timer=new QTimer(this);,connect(timer,SIGNAL(timeout(),this,SLOT(update();,timer-start(1000);,看到这个例子代码,基本知道怎么用这个定时器了,定时器对象需要生成;,定时器用,start(),启动,有,2,个重载,带形参的是毫秒间隙时间;,定时器启动以后,每隔间隙时间发来一个,timeout(),信号,你可以去连接一个你的槽来处理。,QTimer定时器你可以先从Detailed Descrip,16,练习 做定时器,要求:,1.,按,start,就开始一秒一秒的计时,2.,按,pause,就暂停显示,但背地里还在计时,再按,pause,就显示实际的时间,按,stop,就停,再按一次就清零,按,X,退出时,要有对话框,有帮助,-,关于,QDialog,,上面写上,XXX,几几年几几月几日制做,版本,V0.1,练习 做定时器要求:,17,对,Qt,的几点总结和感悟,做了一些,GUI,程序以后,我们总结一下,Qt,只是提供一些,GUI,的显示,和一些功能类,,对象与对象,对象与,GUI,的逻辑关联,和,Qt,没有关系,Qt,提供数据传输和通道方案,逻辑关系完全是由,C,结构实现,Qt,对象有什么功能,怎么和其它对象连接,要多查,HELP,文档,你体会出来了吗?,对Qt的几点总结和感悟做了一些GUI程序以后,我们总结一下,18,Qt GUI,巩固练习 电子钟,做一个电子钟,,24,小时制显示 时,:,分,:,钞,时分钞中的,:,需要一秒一闪,当按日期按钮时,需要变成日期显示,日期格式,年,-,月,-,日,日期显示完,5,秒后,又变回时间显示,查,HELP,里,QTime,时间类的使用,显示用,QLCDnumber,类,注意逻辑是,C,语法才能实现,Qt GUI巩固练习 电子钟 做一个电子钟,24小时制显,19,Qt,的一些其它类,QGraphicsView,QGraphicsView,动态,2D,显示容器,查看一下,HELP,里它的,Detailed Description,QGraphicsView,提供了一个界面,它既可以管理大数量的定制,2D items,,又可与它们交互,有一个,view widget,可以把这些项绘制出来,并支持旋转与缩放。这个柜架也包含一个事件传播结构,对于在,scene,中的这些,items,它具有双精度的交互能力。,Items,能处理键盘事件,鼠标的按,移动、释放、双击事件,也可以跟踪鼠标移动。,整个框架是这样的,QGraphicsView,容器,-,QGraphicsScene,场景,-QGraphicsItem,图元,Qt 的一些其它类 QGraphicsViewQGraph,20,Qt,的一些其它类,QGraphicsView,QGraphicsView,里包含了,QGraphicsScene,而,QGraphicsScene,拥有多个图元,包含三层:背景层,图元层,前景层,QGraphicsItem,图元,支持鼠标事件,,滚轮事件,,上下文菜单事件,支持键盘输入焦点,,按键事件,支持拖放,支持分组,Qt 的一些其它类 QGraphicsViewQGraph,21,Qt,的一些其它类,QGraphicsView,QGraphicsItem,图元类,只是一个虚基类,有,8,种不同的派生类,.,QGraphicsEllipseItem,椭圆,图元,QGraphicsLineItem,线图元,QGraphicsPathItem,曲线图元,QGraphicsPixmapItem,像素图元,QGraphicsPolygonItem,多边形图元,QGraphicsRectItem,矩形图元,QGraphicsSimpleTextItem,文本标签图元,QGraphicsTextItem,文本浏览器图元,Qt 的一些其它类 QGraphicsViewQGraph,22,Qt,的一些其它类,QGraphicsView,我们以,QGraphicsPixmapItem,像素图元为例,介绍框架的连接,QGraphicsPixmapItem,像素图元,也就是拿一张图片来显示图元,程序框架如下,QMainWindow-QGraphicsView,容器,-,QGraphicsScene,场景,-QGraphicsPixmapItem,像素图元,Qt 的一些其它类 QGraphicsView我们以QGr,23,Qt,的一些其它类,QGraphicsView,QMainWindow,和,QGraphicsView,怎么连接,画上去就可以了,拖过去,
展开阅读全文