在QGLWidget前面附上一个QLabel

时间:2013-08-21 13:55:15

标签: qt opengl

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

一些想法?

1 个答案:

答案 0 :(得分:0)

如果没有明确告诉它,如果没有分配给布局,窗口小部件就不知道它应该在哪里绘制。您必须明确调用QWidget::setGeometry来定位它。

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

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