1 简述
一个稀松平常的效果,点击父控件内的任意子孙控件,父控件呈现选中效果。
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);
}