#include <QApplication>
#include <QWidget>
#include <QMouseEvent>
#include <QPushButton>
#include <iostream>
using namespace std;
//类声明
class A : public QObject{
public:
bool eventFilter(QObject *w, QEvent *e){
if(e->type() == QEvent::MouseButtonPress){
cout << "A" << endl;
return 0;
}
return 0;
}
int m_a = 3;
};
class B : public QObject{
public:
bool eventFilter(QObject *w, QEvent *e){
if(e->type() == QEvent::MouseButtonPress){
cout << "B" << endl;
return 0;
}
return 0;
}
};
class C : public QObject{
public:
bool eventFilter(QObject *w, QEvent *e){
static int i = 0;
if(e->type() == QEvent::MouseButtonPress){
cout << "C = " << i++ << endl;
return 0;
}
return 0;
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
A ma;
B mb;
C mc, mc1;
QWidget w;
QPushButton *pBtn = new QPushButton();
pBtn->setText("testAAA");
pBtn->move(333, 222);
pBtn->setParent(&w);
//安装EventFilter对象的顺序与调用eventFilter函数的顺序是不一样的,后者是逆序
//当安装多个事件过滤器之后,eventFilter函数返回0时,并不会使事件返回给目标对象,而是传递给下一个过滤器对象
//当所有过滤器对象都不处理时才会传递给目标对象
pBtn->installEventFilter(&ma);
pBtn->installEventFilter(&mb);
pBtn->installEventFilter(&mc);
pBtn->installEventFilter(&mc1);
cout << ma.m_a;
w.resize(600,800);
w.show();
return a.exec();
}
【qt学习】事件过滤器的使用
最新推荐文章于 2024-07-01 15:48:51 发布