Размещение виджета QOpenGL внутри QML - PullRequest
8 голосов
/ 11 февраля 2012

У меня есть библиотека, подтверждающая мне QGLWidget, а интерфейс позволяет мне только изменять размер / устанавливать размер и управлять некоторой анимацией GL;но снаружи нет команды GL, все, что я делаю, это инициализирую GLWidget, а затем передаю контекст в библиотеку, а затем вызываю буфер подкачки, чтобы показать анимациюМожно ли разместить QGLWidget внутри QML?если да как?

Ответы [ 2 ]

3 голосов
/ 26 февраля 2012

Это вполне возможно!Вы можете написать плагин QML , который определит новый элемент QML для инкапсуляции библиотеки.

Тогда вы будете import этот плагин из документа QML, и вам будет удобно использовать новый элемент и использовать функции, которые предлагает библиотека.

Совет : если приложение, которое загружает ваш документ QML, было настроено так, чтобы оно находилось в QGLWidget, то вам не нужно создавать новый QGLWidget внутри вашего плагина. Я однажды совершил эту ошибку .

В этом посте показано, как создать простой / новый элемент QML с нуля и как использовать его в документе QML.

2 голосов
/ 23 февраля 2012

QGLWidget происходит от QWidget, в то время как виджеты QML реализованы как QDeclarativeItem, который наследуется от QGraphicsObject, и эти два объекта относятся к разным мирам.

Возможный способ сделать рисунки OpenGL в элементе QML - объявить новый 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

...