首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QGLWidget + QGraphicsScene + QGraphicsView问题

QGLWidget + QGraphicsScene + QGraphicsView问题
EN

Stack Overflow用户
提问于 2010-05-06 05:20:05
回答 3查看 5.1K关注 0票数 0

我想创建一个使用QGLWidget,QGraphicsScene和QGraphicsView的简单缩略图浏览器。我对在QGraphicsScene上放置QGLWidget有一个问题。代码如下所示:

代码语言:javascript
复制
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并显示在屏幕上的组件?

感谢你的帮助

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-06 05:46:30

QGraphicsScene::addWidget documentation声明QGLWidget不是受支持的小部件类型。

QGLWidget设置为QGraphicsView的视区的子对象似乎也不起作用。

编辑:

实际上,如果我将renderText调用放在我的测试GL小部件的paintGL方法中,就可以将QGLWidget设置为视区的子对象。

票数 1
EN

Stack Overflow用户

发布于 2011-11-01 16:19:35

要使QGLWidget在QGraphicsView中显示,您应该为它重定向绘制。您可以像这样覆盖paintGL:

代码语言:javascript
复制
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);
    }
}

它在大多数平台上都工作得很好,但仍然会显示黑色的小部件。

票数 2
EN

Stack Overflow用户

发布于 2010-05-06 05:36:20

QGraphicsView文档中:

要使用OpenGL呈现,只需调用setViewport(new QGLWidget)即可。QGraphicsView取得视口小部件的所有权。

因此,为了在视图上绘制文本,请使用QGraphicsTextItem,而不是尝试使用QGLWidget绘制文本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2776872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档