c++ - 如何突出显示特定的 `QWidget`

标签 c++ qt event-handling

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

Documentation about event filters

关于c++ - 如何突出显示特定的 `QWidget`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44116645/

相关文章:

qt - 如何在不使用QProcess的情况下在C++/Qt中进行ping操作?

vb.net - 如何在调用和事件 VB.net 时传递附加参数

c# - 自定义按钮: Click through label

c++ - 明确提及预期的分号

c++ - 我仍然不相信在对象不是 `destructor` 的情况下调用 `constructed`

c++ - 车牌在符号上的分割

regex - 使用正则表达式从 CSV 中提取数据并将其转换为 JSON

c++ - C++ 类接口(interface)类的析构函数

c++ - QML:如何将着色器效果与 QtGraphical 效果混合?

javascript - 在 Firefox 插件中捕获复制事件