我有一个自定义复杂的QGLWidget,以及一组半透明的QWidgets - 动画工具栏。我需要将QWidgets置于我的QGLWidget之上。 这样的事情:http://s17.postimg.org/esbmhxkdr/Smart_Arm.png
我找到了唯一的方法:QGraphicsScene + QGraphicsView with viewport QGLWidget。 因此,所有小部件都在场景中,视图是QMainWindow的中心小部件。
// MainWindow - constructor
m_scene = new QGraphicsScene;
...
makeToolbars();
...
m_scene->addWidget(m_toolbarLeft);
m_scene->addWidget(m_toolbarRight);
m_scene->addWidget(m_toolbarCenter);
...
m_graphicsView = new QGraphicsView(this);
m_graphicsView->setScene(m_scene);
m_graphicsView->setRenderHint(QPainter::Antialiasing);
m_graphicsView->setRenderHint(QPainter::SmoothPixmapTransform);
m_graphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
m_graphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
setCentralWidget(m_graphicsView);
...
// MainWindow - resizeEvent
QMainWindow::resizeEvent(event);
m_scene->setSceneRect(m_graphicsView->rect());
m_graphicsView->fitInView(m_scene->sceneRect(), Qt::KeepAspectRatio);
// move toolbars
...
无论有没有视口设置,它都能正常工作:
m_graphicsView->setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
当我尝试将视频设置为我自己的自定义QGLWidget时,我看到工具栏后面只有一个白色背景而不是我的QGLWidget。
MyGLWidget *widget = new MyGLWidget;
m_graphicsView->setViewport(widget);
即使我尝试使用带文本的简单QGLWidget,它也是白色背景和工具栏。
QGLWidget *w = new QGLWidget;
w->renderText(0,0,"Hello");
m_graphicsView->setViewport(w);
我做错了什么?为什么我的OGL小部件没有显示?也许其他解决方案 感谢。