如何突出显示特定的`QWidget`

时间:2017-05-22 15:20:24

标签: c++ qt event-handling

对于搜索/关联行为,我们的目的是突出显示搜索产生的特定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实现。

1 个答案:

答案 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);

Documentation about event filters