在QML中托管QOpenGL小部件

时间:2012-02-11 18:32:05

标签: opengl qt4 qml qglwidget

我有一个库证明了我的QGLWidget,界面允许我只调整大小/设置大小,并控制一些GL动画;但没有GL命令暴露在外面,我只是初始化GLWidget,然后将上下文传递给库,然后调用交换缓冲区来显示动画..

我想将这个QGLWidget库集成到QML中,是否有可能在QML中加入QGLWidget?如果有,怎么样?

2 个答案:

答案 0 :(得分:3)

完全有可能!您可以write a QML plugin define a new QML element来封装库。

然后你会从QML文档中import这个插件,你可以使用新元素并利用图书馆提供的功能。

提示:如果加载QML文档的应用程序设置为在QGLWidget上,那么您不需要在插件中创建新的QGLWidget。 I did this mistake once

This blog post展示了如何从头开始创建一个简单/新的QML元素以及如何在QML文档中使用它。

答案 1 :(得分:2)

QGLWidget派生自QWidget,而QML小部件实现为QDeclarativeItem,派生自QGraphicsObject,这两个小部件来自不同的世界。

在QML项目中执行OpenGL绘图的可能方法是声明一个新的QDeclarativeItem,将其公开给QML系统,然后覆盖此QDeclarativeItem子类的draw方法以进行本机绘制(通过调用QPainter的beginNativePainting和endNativePainting)绘制方法中提供的实例)。

看看这两个链接: http://doc.qt.nokia.com/4.7-snapshot/qml-extending.html http://developer.qt.nokia.com/forums/viewthread/4109