【问题标题】:Attach a QLabel in front of QGLWidget在 QGLWidget 前面附加一个 QLabel
【发布时间】:2023-04-04 14:52:02
【问题描述】:

我有一个 QGLWidget,我喜欢在它上面附加一个 QLabel 用于一些测量可视化(fps、对象数量等)。

我希望 QGLWidget 尽可能保持干净,以便进一步重用,而不是在其中使用 QGLWidget::renderText,而是使用外部调试接口进行这些测量。

现在我有:

    QVBoxLayout *l = new QVBoxLayout;

    this->gl = new MyGLWidget;
    l->addWidget(gl);

    QLabel *fps = new QLabel;
    fps->setText(QString("FPS"));
    fps->setStyleSheet("QLabel { background-color : red; color : blue; }");
    fps->setParent(gl);

    this->setLayout(l);

但是什么都没有出现..当然,如果我使用 QLayout::addWidget 将 QLabel 添加到布局中,我会看到它..但这不是我想要的..

一些想法?

【问题讨论】:

    标签: qt opengl


    【解决方案1】:

    如果你没有明确地告诉它,小部件不知道它应该在哪里绘制,如果没有被分配到一个布局。您必须显式调用 QWidget::setGeometry 来定位它。

    但是,将常规 Qt 小部件放在 QGLWidget 之上有一些优点。 QGLWidget 实际上创建了一个由顶级窗口作为父级的子窗口。然而,常规小部件没有自己的专用子窗口,这意味着从图形系统的角度来看,它们与顶层窗口本身处于相同的 Z 堆叠级别。并且 QGLWidget 的实际子窗口具有更高的 Z 堆叠级别。将 QLabel 作为 QGLWidget 的父对象应将其放置在正确的 Z 堆叠级别。但是OpenGL的绘图操作和Qt的绘图操作不同,所以你在QGLWidget上的绘图可能会弄乱QLabel。

    简单来说,QGLWidget 有一个函数“drawText”是有原因的。

    【讨论】:

      猜你喜欢
      • 2018-08-02
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      • 2019-03-13
      • 1970-01-01
      • 1970-01-01
      • 2022-11-19
      • 1970-01-01
      相关资源
      最近更新 更多