天天看点

Qt 递归安装父控件的所有子孙控件事件过滤器 遍历安装事件过滤器

文章目录

        • 1 简述
        • 2 实现

1 简述

一个稀松平常的效果,点击父控件内的任意子孙控件,父控件呈现选中效果。

Qt 递归安装父控件的所有子孙控件事件过滤器 遍历安装事件过滤器

2 实现

那么怎么收到子孙控件的点击事件呢?

把所有的子孙控件事件过滤器安装到父控件上。

怎么安装呢?肯定不是手动安装

自动递归父控件的子孙。

void recursiveInstallEventFilter(QObject *pObject)
    {
        if(pObject->children().count() > 0) {
            foreach (QObject *objChild, pObject->children()) {
                objChild->installEventFilter(this);
                recursiveInstallEventFilter(objChild);
            }
        }
    }
           

收到子孙控件的点击事件之后,就认为是被选中了,再自定义选中效果就好了

virtual bool eventFilter(QObject *watched, QEvent *event)
    {
        if(QEvent::MouseButtonPress == event->type()){
            emit sigFormSelected();
        }
        return QObject::eventFilter(watched,event);
    }
           

继续阅读