Qt 事件过滤器问题
Widget::Widget(QWidget *parent) : QWidget(parent) { this->resize(80,22); this->button =new QPushButton("laowang"); this->lineEdit=new QLineEdit; this->button->installEventFilter(this); this->lineEdit->installEventFilter(this); QHBoxLayout *layout=new QHBoxLayout(this); layout->addWidget(this->button); layout->addWidget(this->lineEdit); }
我在使用Qt的事件过滤器时,
在widget中使用重写了函数
bool eventFilter(QObject *obj, QEvent *event);
在Widget的构造函数中button和lineEdit安装事件过滤器,
运行之后发现,button和lineEdit不能显示。
不知道什么原因,求指教。
---------------------------------------------
解决方法:
经过我不断写例子测试,终于找到问题所在,
bool eventFilter(QObject *obj, QEvent *event);
我在重写eventFilter这个事件函数的时候,对于事件循环的概念理解不深,
当判断语句结束的时候,返回时没有添加return QWidget::eventFilter(o,e);
造成事件循环不能流畅。
bool Widget::eventFilter(QObject *o, QEvent *e) { qDebug()<<"eventFilter--"; if(o=this->button) { if(e->type()==QEvent::MouseButtonPress) { qDebug()<<"eventFilter--button mousePress--"; } } else return QWidget::eventFilter(o,e); }