对于搜索/关联行为,我们的目的是突出显示搜索产生的特定QWidget
。
在我的第一个原型中,它只是在给定的QWidget
顶部创建一个高光装饰。但是,调整窗口小部件时,突出显示不会适应/对齐。
DecorationWidget decoration;
...
QWidget* result = search(searchStr);
if (result)
{
decoration.setParent(result);
decoration.setGeometry(QRect(QPoint(0,0),result->size()));
decoration.raise();
decoration.show();
}
else
{
decoration.hide();
}
我怎样才能检测到QWidget
调整大小?
我显然关于连接,但QWidget
在调整大小时不会发出。它也不允许extends
小部件,因为搜索可能指向任意QWidget
。
不允许更改QWidget
本身的样式(实际上更改QWidget的任何内容),因为它可能具有特定样式或PaintEvent
实现。
答案 0 :(得分:2)
可以使用事件过滤器轻松完成。
在DecorationWidget中重写eventFilter方法(从QObject派生)并在那里捕获resize事件。
例如:
bool DecorationWidget::eventFilter(QObject* watched, QEvent* event)
{
if(event->type() == QEvent::Resize)
{
QResizeEvent *resizeEvent = static_cast<QResizeEvent *>(event);
resize(resizeEvent->size());
}
return false;
}
在 result 小部件上安装DecorationWidget实例作为事件过滤器:
result->installEventFilter(myDecorationWidget);
请切换到切换到其他窗口小部件时删除事件过滤器。
prevoiusResult->removeEventFiter(myDecorationWidget);