(12)事件和信号的区别
来源:互联网 发布:网络销售干什么的 编辑:程序博客网 时间:2024/05/18 17:42
答案都在注释中:
#include <QApplication>#include <QLabel>#include <QMouseEvent>//一般来说,使用Qt编程时,我们并不会把主要精力放在事件上,//因为在Qt中,需要我们关心的事件总会发出一个信号。//比如,我们关心的是QPushButton的鼠标点击,但我们不需要关心这个鼠标点击事件,而是关心它的clicked()信号。//信号与事件的区别//Qt的事件很容易和信号槽混淆。这里简单的说明一下,signal由具体对象发出,//然后会马上交给由connect函数连接的slot进行处理;而对于事件,//Qt使用一个事件队列对所有发出的事件进行维护,当新的事件产生时,会被追加到事件队列的尾部,//前一个事件完成后,取出后面的事件进行处理。//但是,必要的时候,Qt的事件也是可以不进入事件队列,而是直接处理的。//并且,事件还可以使用“事件过滤器”进行过滤。//总的来说,如果我们使用组件,我们关心的是信号槽;//如果我们自定义组件,我们关心的是事件。因为我们可以通过事件来改变组件的默认操作。//比如,如果我们要自定义一个QPushButton,那么我们就需要重写它的鼠标点击事件和键盘处理事件,并且在恰当的时候发出clicked()信号。//在所有组件的父类QWidget中,定义了很多事件处理函数,//如keyPressEvent()、keyReleaseEvent()、mouseDoubleClickEvent()、mouseMoveEvent ()、mousePressEvent()、mouseReleaseEvent()等。//这些函数都是protected virtual的,也就是说,我们应该在子类中重定义这些函数。下面来看一个例子。class EventLabel : public QLabel{protected: void mouseMoveEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event);};void EventLabel::mouseMoveEvent(QMouseEvent *event){ this->setText(QString("<center><h1>Move: (%1, %2)</h1></center>") .arg(QString::number(event->x()), QString::number(event->y())));}void EventLabel::mousePressEvent(QMouseEvent *event){ this->setText(QString("<center><h1>Press: (%1, %2)</h1></center>") .arg(QString::number(event->x()), QString::number(event->y())));}void EventLabel::mouseReleaseEvent(QMouseEvent *event){ QString msg; msg.sprintf("<center><h1>Release: (%d, %d)</h1></center>", event->x(), event->y()); this->setText(msg);}int main(int argc, char *argv[]){ QApplication a(argc, argv); EventLabel *label = new EventLabel; label->setWindowTitle("MouseEvent Demo"); label->resize(300, 200); label->show(); return a.exec();}//这里我们继承了QLabel类,重写了mousePressEvent、mouseMoveEvent和MouseReleaseEvent三个函数。//我们并没有添加什么功能,只是在鼠标按下(press)、鼠标移动(move)和鼠标释放(release)时把坐标显示在这个Label上面。
0 0
- (12)事件和信号的区别
- QT的事件和信号的区别
- Qt事件和信号的区别
- 高速信号和高频信号的区别
- 信号和信号量的区别
- windows程序事件的信号状态和非信号状态
- Qt事件和信号的比较
- 窄带信号和宽带信号的区别和联系
- 窄带信号和宽带信号的区别和联系
- pyqt5学习(四)事件和信号
- pyqt5学习(四)事件和信号
- QT 事件和信号
- Qt 事件和信号
- pyQt5-事件和信号
- 信号和事件--事件篇
- 模拟信号和数字信号的区别
- 信号处理:signal和sigaction的区别
- 信号地和电源地的区别
- Android文件展示-展开收起效果
- 程序员面试经典源代码
- tornado框架最简单实现
- Protobuffer和json深度对比
- Android中MIME类型的解释
- (12)事件和信号的区别
- c语言函数一个要注意的地方
- Another app is currently holding the yum lock解决方法
- js 一次元素点击响应2个事件函数
- error C3861: “snprintf”: 找不到标识符
- ViewPager缓存机制
- maven环境快速搭建
- 牛逼程序猿需要尝试的10种姿势
- EF框架,字段可以为空