QT事件(1)
2015-08-10 16:25
453 查看
QT事件的产生可分为两种,一种是系统自身产生的,比如定时器,另一种是用户操作产生的,比如鼠标,键盘事件。QT是用一个事件队列来维护事件,这些事件都是不可预知的,比如我们并不知道用户何时按下鼠标,所以当有事件产生时,新产生的事件就会添加到队列后面,等待着被处理。当然也可以通过一些方法直接处理。
因为我在公司做的项目不算难,基本不用去关心事件是如何发生,如何处理的,更多的是在关心信号和槽函数的连接,信号何时发出去。但我觉得想学好QT,就需要去学习QT事件。所以这里做个学习的笔记。
一开始我也对事件和信号与槽这两者混淆,网上很多人是这样子区分两者的不同的:一般来说,使用 Qt 组件时,我们并不会把主要精力放在事件上。因为在 Qt 中,我们关心的更多的是事件关联的一个信号。比如,对于
看完上面的区分或许还是有些模糊,但我们在对程序理解模糊时,应该通过自己动手写代码,看效果,这样会有更深的理解,因为同一个意思,每个人表达出来的或许不一样。
话不多说了,看下面部分代码:
以上CustomLabel类是我自己定义的一个类,继承QLabel,重写了mousePressEvent(QMouseEvent *ev)和mouseReleaseEvent(QMouseEvent *ev)方法。当运行程序把鼠标在CustomLabel按下时,CustomLabel会显示press,释放鼠标时会显示release。这说明了我们改写鼠标按下和释放的事件,达到我们想要的效果,如果我们不重写的话,按下鼠标和释放鼠标,CustomLabel并不会有反应。
有更好理解的欢迎一起交流,互相学习。
因为我在公司做的项目不算难,基本不用去关心事件是如何发生,如何处理的,更多的是在关心信号和槽函数的连接,信号何时发出去。但我觉得想学好QT,就需要去学习QT事件。所以这里做个学习的笔记。
一开始我也对事件和信号与槽这两者混淆,网上很多人是这样子区分两者的不同的:一般来说,使用 Qt 组件时,我们并不会把主要精力放在事件上。因为在 Qt 中,我们关心的更多的是事件关联的一个信号。比如,对于
QPushButton的鼠标点击,我们不需要关心这个鼠标点击事件,而是关心它的
clicked()信号的发出。总的来说,如果我们使用组件,我们关心的是信号槽;如果我们自定义组件,我们关心的是事件。因为我们可以通过事件来改变组件的默认操作。比如,如果我们要自定义一个能够响应鼠标事件的
EventLabel,我们就需要重写
QLabel的鼠标事件,做出我们希望的操作。
看完上面的区分或许还是有些模糊,但我们在对程序理解模糊时,应该通过自己动手写代码,看效果,这样会有更深的理解,因为同一个意思,每个人表达出来的或许不一样。
话不多说了,看下面部分代码:
#ifndef CUSTOMLABEL_H #define CUSTOMLABEL_H #include <QLabel> class CustomLabel : public QLabel { Q_OBJECT public: explicit CustomLabel(QWidget *parent = 0); protected: void mousePressEvent(QMouseEvent *ev); void mouseReleaseEvent(QMouseEvent *ev); signals: public slots: }; #endif // CUSTOMLABEL_H
#include "customlabel.h" CustomLabel::CustomLabel(QWidget *parent) : QLabel(parent) { } void CustomLabel::mousePressEvent(QMouseEvent *ev){ this->setText("press"); } void CustomLabel::mouseReleaseEvent(QMouseEvent *ev){ this->setText("release"); }
以上CustomLabel类是我自己定义的一个类,继承QLabel,重写了mousePressEvent(QMouseEvent *ev)和mouseReleaseEvent(QMouseEvent *ev)方法。当运行程序把鼠标在CustomLabel按下时,CustomLabel会显示press,释放鼠标时会显示release。这说明了我们改写鼠标按下和释放的事件,达到我们想要的效果,如果我们不重写的话,按下鼠标和释放鼠标,CustomLabel并不会有反应。
有更好理解的欢迎一起交流,互相学习。
相关文章推荐
- qt越来越好了
- Qt 多线程之MoveToThread()
- QT5的移植与错误总结
- QT调用CHM方法
- Qt5+VS2013 “LINK : fatal error LNK1117: 选项“VERSION:1.0.0”中的语法错误”
- Qt之显示图片
- 【Qt OpenGL教程】23:球面映射
- QT程序登录界面回车按钮响应
- Qt 5.3 下OpenCV 2.4.11 开发(10)使用鼠标回调函数对视频帧截图
- Windows编译64位QT并使用VS2010开发
- QT5 QString
- unsigned int 与 unsigned long qt中的ulonglong
- PyQt5初级教程--PyQt5中绘画[11/13]
- QT变异版本下载(SJLJ长跳转,DWARF不传递错误(32位专用),SEH(64位专用)),以及QT的实验室项目
- PyQt5初级教程--PyQt5中的拖放[10/13]
- 转:Qt运行cmd命令
- Qt 操作系统环境变量
- QT 绘制 五角图案
- PyQt5初级教程--PyQt5中的部件II[9/13]
- Qt杂记