我有一个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添加到布局中我看到它......但不是我想要的......
一些想法?
答案 0 :(得分:0)
如果没有明确告诉它,如果没有分配给布局,窗口小部件就不知道它应该在哪里绘制。您必须明确调用QWidget::setGeometry
来定位它。
然而,将常规Qt小部件放在QGLWidget之上有一些优点。 QGLWidget实际上创建了一个由顶级窗口作为父窗口的子窗口。然而,常规小部件没有自己的,相关的子窗口,这意味着,从图形系统的角度来看,它们与顶层窗口本身处于相同的Z堆叠级别。并且QGLWidget的实际子窗口具有更高的Z堆叠级别。将QLabel置于QGLWidget中应将其置于正确的Z堆叠级别。但是OpenGL绘图操作与Qt绘图操作不同,因此你在QGLWidget上的绘图可能会搞乱QLabel。
简单地说,QGLWidget有一个函数“drawText”是有原因的。