单击后QT Gridlayout项目没有突出显示?

时间:2018-08-13 11:49:02

标签: c++ qt qgridlayout

我有一个网格布局为(vtkOpenGLWidget),并且在内部将布局分为四个部分。因此,我要在单击它时突出显示查看端口。 这是我的网格布局图像视图:

enter image description here

我将使用此代码突出显示视口 代码:

void QvtkOpenGLWidgetdrag::paintEvent(QPaintEvent *event)
{
    QOpenGLWidget::paintEvent(event);

    QPainter painter(this);

    painter.setPen(QPen(QBrush(Qt::blue), 2));

    if (hasFocus())
        painter.drawRect(QRect(1, 1, width() - 2, height() - 2));
}

当我单击视口时,它的工作正常。但是当我将在Ui-viewer中选择任何其他模块时出现问题,默认情况下它会显示为未选中状态。但是,我每次都选择一次,一旦我选择了另一个视口,便只有它取消选择并选择了下一个视口,反之亦然。

任何帮助对我来说都是巨大的。 预先谢谢你

1 个答案:

答案 0 :(得分:2)

注意:您的问题不是很清楚,所以我将尽力为您找到正确的解决方案。

原因

QOpenGLWidget 的焦点策略默认设置为Qt::NoFocus。此外,此小部件不遵守样式表。

解决方案

子类 QOpenGLWidget ,将焦点策略更改为setFocusPolicy(Qt::StrongFocus);,然后重新实现paintEvent,如下所示:

void OpenGLWidget::paintEvent(QPaintEvent *event)
{
    QOpenGLWidget::paintEvent(event);

    QPainter painter(this);

    painter.setPen(QPen(QBrush(Qt::magenta), 2));

    if (hasFocus())
        painter.drawRect(QRect(1, 1, width() - 2, height() - 2));
}

示例

为了演示如何在应用程序中实现此目的,我为您准备了一个有效的示例。该代码位于GitHub上。

结果

这将在单击的视图的边缘为您提供漂亮的紫色边框:

enter image description here

相关问题