对于搜索/链接行为,想法是突出显示搜索产生的特定 QWidget
。
在我的第一个原型(prototype)中,它只是在给定的 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
不会在调整大小时发出。也不允许扩展
小部件,因为搜索可能指向任意QWidget
。
不允许更改 QWidget
本身的样式(实际上更改 QWidget 的任何内容),因为它可能具有特定样式或 PaintEvent
实现。
最佳答案
可以使用事件过滤器轻松完成。
在 DecorationWidget 中覆盖 eventFilter 方法(派生自 QObject)并在那里捕获调整大小事件。
例如:
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);
关于c++ - 如何突出显示特定的 `QWidget`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44116645/