如何突出显示特定的“QWidget”

How to highlight a specific `QWidget`

本文关键字:QWidget 何突出 显示      更新时间:2023-10-16

对于搜索/链接行为,这个想法是突出显示搜索产生的特定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实现。

它可以很容易地用事件过滤器完成。

在 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;
}

比在结果小部件上安装 DecorationWidget 的实例作为事件过滤器:

result->installEventFilter(myDecorationWidget);

请记住在切换到另一个小部件时删除事件过滤器。

prevoiusResult->removeEventFiter(myDecorationWidget);

有关事件过滤器的文档