0

我有一个 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 添加到布局中,我会看到它..但这不是我想要的..

一些想法?

4

1 回答 1

0

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

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

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

于 2013-08-22T10:05:17.357 回答