我想使用QGLWidget,QGraphicsScene和QGraphicsView创建一个简单的缩略图查看器。我将QGLWidget放在QGraphicsScene上有问题。代码类似于:
QGraphicsScene *testScene = new QGraphicsScene (0, 0, 400, 400, 0);
QGLWidget *testWidget1 = new QGLWidget();
testWidget1->renderText("Test text1");
QGLWidget *testWidget2 = new QGLWidget();
testWidget2->renderText("Test text2");
testScene->addWidget(testWidget1);
testScene->addWidget(testWidget2);
QGraphicsView *testView = new QGraphicsView();
testView->setScene(testScene);
testView->show()
可以在QGraphicsScene / QGraphicsView上放置几个QGLWidgets吗?我做错了什么?有没有其他组件可以嵌入QGLWidgets并在屏幕上显示它们?
感谢您的帮助
答案 0 :(得分:2)
要在QGraphicsView中显示QGLWidget,您应该为其重定向绘画。您可以像这样覆盖paintGL:
virtual void MyGLWidget::paintGL()
{
QGLWidget::paintGL();
//support redirecting painting
QPaintDevice* device = QPainter::redirected(this);
if (device != NULL && device != this)
{
QImage image = grabFrameBuffer();
QPainter painter(this);
painter.drawImage(QPointF(0.0,0.0),image);
}
}
它适用于大多数平台,但仍然会显示黑色小部件。
答案 1 :(得分:1)
QGraphicsScene::addWidget documentation表示QGLWidget
不是受支持的窗口小部件类型。
将QGLWidget
托管到QGraphicsView
的视口上似乎也不起作用。
修改强>
实际上,如果我将QGLWidget
调用放在我的测试GL小部件的renderText
方法中,那么将paintGL
托管到视口会有效。
答案 2 :(得分:0)
来自QGraphicsView文档:
要使用OpenGL渲染,只需调用
setViewport(new QGLWidget)
即可。 QGraphicsView获得视口小部件的所有权。
因此,为了在视图上绘制文字,请使用QGraphicsTextItem而不是尝试使用QGLWidget
绘制文字。