2012-02-11 57 views
8

我有一個庫可以證明我是一個QGLWidget,並且該接口允許我只調整大小/設置大小,並控制一些GL動畫;但沒有GL命令暴露在外面,所有我做它初始化GLWidget,然後將上下文傳遞到庫,然後調用交換緩衝區顯示動畫..在QML中託管QOpenGL部件

我想將此QGLWidget庫集成到QML,是否有可能在QML中使用QGLWidget?如果是的話如何?

回答

3

這是完全可能的!你可以write a QML plugin那將define a new QML element來封裝庫。

然後你會import從QML文件這個插件,你會好使用新的元素,並利用該庫提供的功能。

提示:如果加載您的QML文檔的應用程序已設置爲在QGLWidget上,那麼您將不需要在插件中創建一個新的QGLWidget。 I did this mistake once

This blog post顯示瞭如何從頭創建一個簡單的/新的QML元素以及如何在QML文檔中使用它。

+0

嗨卡爾,感謝提示,今天讓我試試這個... :) – 2012-03-01 09:30:50

+3

誰低估,請解釋原因。 – karlphillip 2012-03-02 11:18:58

+0

前2個鏈接不再工作 – wotanii 2017-06-01 07:30:49

2

QGLWidget派生自QWidget,而QML Widget實現爲QDeclarativeItem派生自QGraphicsObject,這兩個是不同的世界。

在QML項目中執行OpenGL繪圖的可能方法是聲明一個新的QDeclarativeItem,將其展示給QML系統,然後重寫此QDeclarativeItem子類的繪製方法以進行本地繪製(通過調用beginNativePainting和endNativePainting QPainter實例在draw方法中提供)。

看一看這兩個環節: http://doc.qt.nokia.com/4.7-snapshot/qml-extending.html http://developer.qt.nokia.com/forums/viewthread/4109