Как обновить чертежи OpenGL (QOpenGLWidget) при добавлении в QGraphicsScene?
Я основал свою реализацию на этом образце. https://doc.qt.io/qt-5/qtopengl-2dpainting-example.html
Пример выполняет рендеринг / анимацию 2 изображений. Один выводится с использованием встроенной функциональности qt, а другой - с использованием OpenGL. Вот и все, что нужно сделать. Рисуемое изображение точно такое же.
Образец работает отлично. Я могу видеть оба изображения одушевленными. Затем, когда я пытаюсь внести изменения, добавив класс Window (который содержит QOpenGLWidget) внутри QGraphicsScene; QOpenGLWidget перестает обновляться.
Оригинал main.cpp
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QSurfaceFormat fmt;
fmt.setSamples(4);
QSurfaceFormat::setDefaultFormat(fmt);
Window window;
window.show();
return app.exec();
}
Изменил main.cpp
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QSurfaceFormat fmt;
fmt.setSamples(4);
QSurfaceFormat::setDefaultFormat(fmt);
Window window;
//window.show();
QGraphicsScene scene;
scene.addWidget(&window);
scene.addText("Hello");
QGraphicsView view(&scene);
view.show();
return app.exec();
}
Вот вывод.
Полный исходный код доступен здесь. https://github.com/syaifulnizamyahya/QT2dpainting
1 ответ
В документах QGraphicsProxyWidget *QGraphicsScene::addWidget(QWidget *widget, Qt::WindowFlags wFlags = Qt::WindowFlags())
Обратите внимание, что виджеты с установленным атрибутом виджета Qt::WA_PaintOnScreen и виджеты, которые обертывают внешнее приложение или контроллер, не поддерживаются. Примерами являются QGLWidget и QAxWidget.
Я думаю, что вам не повезло. Может быть, документы никогда не были адаптированы, когда родился QOpenGLWidget.
Также есть несколько сообщений об ошибках на Jira, которые очень похожи на ваш случай: https://bugreports.qt.io/browse/QTBUG-44063
Если бы я был вами, чтобы быть уверенным, я бы спросил в списках рассылки по интересам, вот куда регулярно приходят разработчики Qt.