【问题标题】:QT Gridlayout Item not highlight after clicking?QT Gridlayout Item点击后不突出显示?
【发布时间】:2018-08-13 11:49:01
【问题描述】:

我有一个网格布局(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 中选择任何其他模块时,我遇到了问题,然后默认情况下它会显示未选中。但是,我每次都选择了,一旦我将选择另一个视口,然后只有它取消选择并选择下一个视口,反之亦然。

任何帮助对我来说都很重要。 提前谢谢你

【问题讨论】:

  • 不要手动调用paintEvent,例如通过将其连接到点击的信号。
  • 请在之后 EDIT 使用此代码并发布另一个问题,因为它引入了一个完全不同的问题。还要在您的评论中添加我的答案和例外情况的链接。

标签: c++ qt qgridlayout


【解决方案1】:

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

原因

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 上提供。

结果

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

【讨论】:

  • gridLayout 中所有可用的 OpenGLWidget。不过,我会像这样突出显示。
  • @AmarKumar,gridLayout 中所有可用的 OpenGLWidget 是什么意思?
  • 表示网格布局默认采用OpenGLWidget的整个尺寸。当我调用 (1*1) 布局时。因此,边框是在布局内部或布局外部创建的
  • @AmarKumar,我现在明白了。因此,这种方法将框架放在小部件内。
  • 当我在 mainwindow.cpp 中使用此函数时出现此错误,RadSpaEngine.exe 中 0x00007FF645A9D53F 处的未处理异常:0xC00000FD:堆栈溢出(参数:0x0000000000000001、0x000000C5A3C03FB0)。
猜你喜欢
  • 1970-01-01
  • 2014-10-08
  • 2011-08-01
  • 2017-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-20
  • 2012-02-10
相关资源
最近更新 更多