Размещение виджета QOpenGL внутри QML

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

Я хочу интегрировать эту библиотеку QGLWidget в QML, возможно ли разместить QGLWidget внутри QML? если да как?

2 ответа

Решение

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

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

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

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

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

Возможный способ сделать рисунки OpenGL в элементе QML состоит в том, чтобы объявить новый QDeclarativeItem, представить его системе QML и затем переопределить метод рисования этого подкласса QDeclarativeItem для выполнения родной рисования (путем вызова beginNativePainting и endNativePainting экземпляра QPainter, предоставленного в метод розыгрыша).

Посмотрите на эти две ссылки: http://doc.qt.nokia.com/4.7-snapshot/qml-extending.html http://developer.qt.nokia.com/forums/viewthread/4109

Другие вопросы по тегам