我有一个网格布局为(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));
}
当我单击视口时,它的工作正常。但是当我将在Ui-viewer中选择任何其他模块时出现问题,默认情况下它会显示为未选中状态。但是,我每次都选择一次,一旦我选择了另一个视口,便只有它取消选择并选择了下一个视口,反之亦然。
任何帮助对我来说都是巨大的。 预先谢谢你
答案 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上。
这将在单击的视图的边缘为您提供漂亮的紫色边框: