Qt事件过滤器

你。 提交于 2021-02-20 07:36:59

事件过滤器比较强大

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,那么这个控件基本上就是不会产生事件了,甚至自身得绘图等事件都不会有。

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

事件系统:


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!