【发布时间】:2012-02-11 18:32:05
【问题描述】:
我有一个库证明我是一个 QGLWidget,界面只允许我调整大小/设置大小,并控制一些 GL 动画;但是没有 GL 命令暴露在外面,我所做的只是初始化 GLWidget,然后将上下文传递给库,然后调用交换缓冲区来显示动画..
我想将此 QGLWidget 库集成到 QML 中,是否可以在 QML 中放置一个 QGLWidget ?如果是的话怎么办?
【问题讨论】:
我有一个库证明我是一个 QGLWidget,界面只允许我调整大小/设置大小,并控制一些 GL 动画;但是没有 GL 命令暴露在外面,我所做的只是初始化 GLWidget,然后将上下文传递给库,然后调用交换缓冲区来显示动画..
我想将此 QGLWidget 库集成到 QML 中,是否可以在 QML 中放置一个 QGLWidget ?如果是的话怎么办?
【问题讨论】:
完全有可能!您可以write a QML plugin 将define a new QML element 封装库。
然后,您将从 QML 文档中import 这个插件,您将很好地使用新元素并利用库提供的功能。
提示:如果加载 QML 文档的应用程序设置为在 QGLWidget 上,那么您无需在插件中创建新的 QGLWidget。 I did this mistake once.
This blog post 展示了如何从头开始创建一个简单/新的 QML 元素以及如何在 QML 文档中使用它。
【讨论】:
QGLWidget 派生自 QWidget,而 QML 小部件实现为派生自 QGraphicsObject 的 QDeclarativeItem,这两个是不同的世界。
在 QML 项目中进行 OpenGL 绘图的可能方法是声明一个新的 QDeclarativeItem,将其暴露给 QML 系统,然后重写此 QDeclarativeItem 子类的 draw 方法以进行原生绘画(通过调用 QPainter 的 beginNativePainting 和 endNativePainting draw 方法中提供的实例)。
看看这两个链接: http://doc.qt.nokia.com/4.7-snapshot/qml-extending.html http://developer.qt.nokia.com/forums/viewthread/4109
【讨论】: