QT Gridlayout Item点击后不高亮?

QT Gridlayout Item not highlight after clicking?

我有一个网格布局(vtkOpenGLWidget),在内部我将布局分为四个部分。所以,我想在单击它时突出显示视口。 这是我的网格布局图像视图:

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

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

它工作正常,当我点击视口时。但是当我 select Ui-viewer 中的任何其他模块时,我遇到了问题,然后它将默认显示未 selected。但是,我每次都 selected,一旦我将 select 到另一个视口,那么只有它 unselect 和 select 到下一个视口,反之亦然。

任何帮助对我来说都是可观的。 提前谢谢你

注意:你的问题不是很清楚,所以我会试着为你猜出正确的解决方案。

原因

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.

上获得

结果

这会在点击视图的边缘给你一个漂亮的紫色边框: