我想创建一个使用QGLWidget,QGraphicsScene和QGraphicsView的简单缩略图浏览器。我对在QGraphicsScene上放置QGLWidget有一个问题。代码如下所示:
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并显示在屏幕上的组件?
感谢你的帮助
发布于 2010-05-06 05:46:30
QGraphicsScene::addWidget documentation声明QGLWidget不是受支持的小部件类型。
将QGLWidget设置为QGraphicsView的视区的子对象似乎也不起作用。
编辑:
实际上,如果我将renderText调用放在我的测试GL小部件的paintGL方法中,就可以将QGLWidget设置为视区的子对象。
发布于 2011-11-01 16:19:35
要使QGLWidget在QGraphicsView中显示,您应该为它重定向绘制。您可以像这样覆盖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);
}
}它在大多数平台上都工作得很好,但仍然会显示黑色的小部件。
发布于 2010-05-06 05:36:20
从QGraphicsView文档中:
要使用OpenGL呈现,只需调用
setViewport(new QGLWidget)即可。QGraphicsView取得视口小部件的所有权。
因此,为了在视图上绘制文本,请使用QGraphicsTextItem,而不是尝试使用QGLWidget绘制文本。
https://stackoverflow.com/questions/2776872
复制相似问题