首页 > 其他 > 详细

Qt5学习笔记(消息过滤器)

时间:2018-07-27 22:07:36      阅读:162      评论:0      收藏:0      [点我收藏+]

T06EventFilter.pro

1 HEADERS += 2     MyWidget.h
3 
4 SOURCES += 5     MyWidget.cpp
6 
7 QT += widgets gui

MyWidget.h

 1 #ifndef MYWIDGET_H
 2 #define MYWIDGET_H
 3 
 4 #include <QWidget>
 5 #include <QPushButton>
 6 class MyWidget : public QWidget
 7 {
 8     Q_OBJECT
 9 public:
10     explicit MyWidget(QWidget *parent = nullptr);
11     QPushButton* _button;
12     bool eventFilter(QObject *, QEvent *);//原型
13 signals:
14 
15 public slots:
16 };
17 
18 #endif // MYWIDGET_H

MyWidget.cpp

 1 #include "MyWidget.h"
 2 #include <QPushButton>
 3 #include <QEvent>
 4 MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
 5 {
 6     QPushButton* button;
 7     button = new QPushButton("This button", this);
 8     connect(button, SIGNAL(clicked()), this, SLOT(close()));
 9 
10     _button = button;
11     /*button给自己安装了一个消息过滤器,经过button的消息,都先要调用它的过滤器eventFilter函数*/
12     button->installEventFilter(this);
13 }
14 
15 bool MyWidget::eventFilter(QObject *o, QEvent *e)//o谁的,e什么消息(对象,事件)
16 {
17 
18     //(对象,事件)
19     if (o == (QObject*)_button &&
20             (e->type() == QEvent::MouseButtonPress ||
21             e->type() == QEvent::MouseButtonRelease ||
22              e->type() == QEvent::MouseButtonRelease ))//截断,单击,双击,不发生反应
23     {
24         return true;
25     }
26 
27     return QWidget::eventFilter(o, e);
28 }
29 #include <QApplication>
30 int main(int argc, char* argv[])
31 {
32     QApplication app(argc, argv);
33 
34     MyWidget w;
35     w.show();
36 
37     return app.exec();
38 }

 

技术分享图片

消息被过滤,单击,双击都没有反应。

如果将17~26行注释,单击按钮后,窗口立即消失。

 

 

 

欢迎交流。

Qt5学习笔记(消息过滤器)

原文:https://www.cnblogs.com/112358nizhipeng/p/9379806.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!