Размещение виджета 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