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);
}

 

posted @ 2015-09-15 15:13  gebilaowang  阅读(546)  评论(0编辑  收藏  举报