使用 OpenGL 将图像渲染到子类 QDeclarativeItem
Posted
技术标签:
【中文标题】使用 OpenGL 将图像渲染到子类 QDeclarativeItem【英文标题】:Render Image into subclassed QDeclarativeItem using OpenGL 【发布时间】:2012-01-21 11:40:28 【问题描述】:我正在尝试使用 OpenGL ES 2.0 执行多个图像操作,并将输出显示到子类 QDeclarativeItem 中,然后将在我的 QML GUI 中使用它。 我通读了这里找到的答案:http://developer.qt.nokia.com/forums/viewthread/4109 并通过覆盖 QDeclarativeItem 的 paint() 方法成功地在我的 QML GUI 中绘制了一个从红色到蓝色的矩形:
void GLDeclarativeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
painter->beginNativePainting();
glBegin(GL_QUADS);
glColor3ub(0,0,255);
glVertex2d(0, 0);
glVertex2d(0, height());
glColor3ub(255,0,0);
glVertex2d(width(), height());
glVertex2d(width(), 0);
glEnd();
painter->endNativePainting();
但是,我想要实现的是绘制将在我的自定义 QGLWidget 中处理的图像作为上述 QDeclarativeItem 的内容(而不是红色到蓝色的内容)。
在我使用的自定义 QGLWidget 中:
void GLWidget::paintGL()
glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
用于绘图,效果很好。但是,我找不到我的 GLWidget 中的绘图和我的 GLDeclarativeItem 之间的转换。到目前为止,我尝试过的所有东西都只是给了我一个没有任何内容的矩形。 感谢您的帮助!
【问题讨论】:
【参考方案1】:我做了类似的事情,但解决方法不同:我使用了叠加层。
我只是将 OpenGL 渲染放在它自己的小部件中,该小部件放置在 QDeclarativeView 的顶部。
这很好用,尽管您不能在 OpenGL 渲染上进行绘制。如果您确实需要,请叠加另一个具有半透明背景的 QML 视图。
祝你好运。
【讨论】:
谢谢赫尔穆特,听起来很有希望。虽然我不确定如何将小部件作为覆盖添加到 QDeclarativeView。你有任何代码可以帮助我吗?可以很抽象,只是给我一个提示。再次感谢。 嗨,想法是这样的:我猜你使用了QDeclarativeView *myview
。然后执行QGLWidget * myglwidget = new QGLWidget(myview)
(使用您自己的 QGLWidget 子类)并相应地定位它。这样,myglwidget
是myview
的子代,而不是真正的QGraphicsItem
。这对你有帮助吗?以上是关于使用 OpenGL 将图像渲染到子类 QDeclarativeItem的主要内容,如果未能解决你的问题,请参考以下文章