OpenGL в кроссплатформенном приложении Qt Quick
Я пытаюсь разработать кроссплатформенное (или хотя бы настольное + встроенное аппаратное) приложение. Я хотел бы использовать Qt Quick для создания сенсорного графического интерфейса. Я реализовал классическое приложение с QGLWidget, отображающим данные. Важно, что только часть окна находится в OpenGL. Из-за этого возникают проблемы с EGLFS и LinuxFB. Только X11 (или, может быть, Wayland) может правильно отобразить приложение (другие выдают пару ошибок об отсутствующей функции setParent, и весь экран черный). Сейчас я пытаюсь добиться того же в QML. Я хочу использовать этот рендерер OpenGL как часть моего приложения QML и некоторых виджетов Qt Quick вокруг него. Я обнаружил, что несколько человек спрашивают об одном и том же, и ответ всегда заключается в том, чтобы создать подкласс QDeclarativeItem и вызвать его метод beginNativePainting() (остальные говорят экспортировать его через QDeclarativeItem, но я не могу понять, как это сделать). Проблема в том, что на десктопе Qt 5.11 родной художник не является OpenGL. И в QT5 нет способа форсировать графическую систему OpenGL. Поэтому, когда я пытаюсь получить контекст OpenGL (QGLContext::currentContext()), я всегда получаю NULL. Другая проблема: если я экспортирую свой виджет с помощью qmlRegisterType("Test", 1, 0, "Test"); он становится видимым только тогда, когда я использую QDeclarativeView, но затем он не видит Qt Quick. Если я использую QQuickView, он говорит, что модуль "Тест" не установлен. Как я могу реализовать это правильно?
1 ответ
QDeclarativeItem из Qt Quick 1 и Qt4. С Qt 5 и Qt Quick 2 вы должны использовать QQuickItem. Существует по крайней мере 1 пример этого, предоставленный с qt docs, который вы можете найти в Qt Creator на вкладке Welcome в разделе примеров.