QTC图形界面编程技术.docx

QTC图形界面编程技术.docx

ID:62465543

大小:363.16 KB

页数:10页

时间:2021-05-08

QTC图形界面编程技术.docx_第1页
QTC图形界面编程技术.docx_第2页
QTC图形界面编程技术.docx_第3页
QTC图形界面编程技术.docx_第4页
QTC图形界面编程技术.docx_第5页
资源描述:

《QTC图形界面编程技术.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、通识教育课程论文课程名称:_C++图形界面编程技术学院专业班级学号姓名爱尔兰(KEN任课教师LZ论QT的信号/槽机制——WindowCut—一个简单实用的截图软件在图形界面编程技术,我比较喜欢QT这个框架,喜欢它的一次编写,到处编译这种方式,既高效,移植性又强,我试过在window下用Qtcreator开发一个软件,然后直接将工程放到linuxubunto下,再次用Qtcreator打开之前的工程,很简单地直接编译一次,一个代码也不用改,就将该软件移植到Linux下了,这一点很不错。。。更重要的是,Qt为我们带来了全新的思想:将一个工程逻辑分解为多个组件,利用强大的信号/槽机制

2、,竟然可使这个工程分解为相互独立,互不干扰的若干个部分。以下,我将通过介绍我的WindowCut截图软件的编写过程来分析这种思想。界面:截图过程:截图后的效果:思想:这个软件由1:主窗口mainWindow,2:全屏截图器FullEditFEdit(就是半透明的全屏的组件)和3:截图查看器PicSeePSee组成,这3部分都是互相独立的类,在类的定义中,类与类之间无直接的函数调用,这些组件定义了若干个signal/slot,而这3个类的实例是通过signal/slot机制偶合在一起的。mainWindow上的Cut按键被按下后,mainWindow就隐藏,并发出一个StartC

3、ut()的信号,表示“开始截图”。。然后FEdit接收到StartCut()信号后,它就初始化,并记录下此时刻的屏幕背景,最后全屏显示半透明的背景。。然PSee接收这个信号后,它就隐藏起来。。当用户在全屏截图器FEdit的全屏半透明背景上选定好区域后,FullEdit就会隐藏窗口并发出FinishCut“截图完成”的信号(信号中包含了截图的地址),然后截图查看器PSee接收到FinishCut信号及其中的截图的地址后,就会显示窗口,并在窗口上面绘制截图显示给用户,而mainWindow收到FinishCut信号后,就会显示主窗口,并使save按钮可见。此后,用户点击save按钮

4、并成功保存后,mainWindow就会发出PicSaved“图片保存信号”,然后PSe哙收到此信号,然后隐藏。大概的流程就是这样。软件的功能是简单的,但是,里面的思想却很有意义的。对于mainWindow,它只管发射信号,压根儿不用知道有多少个对象收到这些信号(当然也不可能知道),并且当收到特定的信号时,就去执行信号处理器slot就可以了,FullEdit和PicSee也一样。。因为具体哪个信号与哪个槽有连接关系,不是在类的定义在确定的,而且信号/槽的连接是面向类的实例的(所以不可能由类的抽象或定义来确定),QObject::connect(sender,SIGNAL,rece

5、iver,SLOT)这个函数要传递对象的实例作参数,所以无法对抽象(未实例化)的对象之间建立连接关系。这些信号/槽的连接是在类外定义的(上述3个对象的连接关系是在中面向这3个类的具体实例来定义的,与类的定义无关系)。信号/槽互相独立的组件+可靠的信号/槽机制=功能完善的软件在一个项目中,假如我是PM那么只要我们确定好项目中各组件的“信号/槽”连接关系后,我们就可以将这个项目分解为若干个相互独立,无不干扰的的部分,开发过程在只要严格尊守约定好的信号和槽就可以了,待各部分组件完成后,建立后组件的实例间的“信号/槽”关系好,这个项目就完成了。00嗯,这思想,这开发模式,不正是全世界开

6、发者所追求的目标吗??SRC:#includevQtGui/QApplication>#include""#include""#include""intmain(intargc,char*argv[]){QApplicationa(argc,argv);WidgetmainWindow;Ill三二J毎Widget"horl^orta1LayoutJ]1C^HRoxLayoutCutButtcn刮QPushButtonSav«-Button2dQPushButtonMP);;PNGFile(*PNG);;JPEGFile(*.JPG)"if())olmage();();y1=ev

7、ent->pos().y();isLeftDown=true;();y2=event->pos().y();update。;();y2=event->pos().y();if(x1>x2)swap(x1,x2);if(y1>y2)swap(y1,y2);//为right-bottom坐标));//记录截图区域的对角的坐标使(x1,y1)为left-top坐标,(x2,y2)//记录截图区域Qlmage*_final_screen=newQlmage(this->_Cut(_screen,x1

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。