Qt事件过滤器

2021-02-20 06:57发布

事件过滤器比较强大

bool FormSearch::eventFilter(QObject *obj, QEvent *event)
{
    if (obj == this->lineEdit)
    {
        if(event->type() == QEvent::FocusIn)
            this->clearText();
        if(event->type() == QEvent::MouseButtonDblClick)
            this->clearText();
        QKeyEvent *e = static_cast<QKeyEvent*>(event);
        if(e->key() == Qt::Key_Space && (e->modifiers() & Qt::ShiftModifier))
            this->clearText();
    }
    return QWidget::eventFilter(obj,event);
}


过滤器,是针对某个特定的控件,来定义行为。包括键盘,鼠标移入移出等行为。

QEvent下的如FocusIn是由众多的小事件构成的。

还可以针对某一个特定的事件,就是吧event转换成QKeyEvent或者是QMouseEvent类指针。如果是多键组合而成。那么就是类似上方代码。

最后在把事件分发出去。

然后选择控件去installEventFilter(QObject *obj);    obj这个指针,会在自身使用的时候转过来引用eventFilter函数。

enter不是回车键哦,return才是。

每个控件包含一个列表,总是先去调用列表中得过滤器,然后再进行自己得处理。所以如果直接返回true,那么这个控件基本上就是不会产生事件了,甚至自身得绘图等事件都不会有。

最先到达子部件,一步步往上传得。

事件系统:


标签: