Показать материал Qt3D внутри QWidget в Qt5
Так что я почувствовал себя тепло и нечетко внутри после прочтения, что Qt3D вновь появился в v2.0 и на самом деле скоро станет частью Qt5, и что его части уже доступны для тестирования в качестве предварительного технического обзора.
Я изложил с простым планом, у меня будет Qt3D, работающий внутри виджета в моем существующем приложении на основе C++/widgets. Однако единственный пример, который я смог найти, который показывает, как использовать Qt3D из C++, называется basicshapes-cpp, и он показывает некоторые фигуры, отрисованные в отдельном OpenGL/Qt3D, подготовленном. window
(класс, который расширяется QWindow
) в отличие от QWidget
,
Сейчас я читаю о роли QWindow
против QWidget
и как все это аккуратно свисает, но я все еще пытаюсь понять, как я могу портировать код Qt3D из basicshapes-cpp
программа для запуска внутри QWidget
, Каковы основные шаги, которые необходимо соблюдать?
1 ответ
Если кому-то интересно, я реализовал реальный виджет Qt3D. К сожалению, он работает только с Qt >= 5.14, потому что, начиная с этой версии, вы можете вручную контролировать цикл рендеринга.
Код можно найти здесь.
Это извлечение этого поста показывает, как это работает:
#include <QObject>
#include <QWidget>
#include <Qt3DExtras/Qt3DWindow>
class Qt3DWidget
: public QWidget
{
Q_OBJECT
QWidget *container;
public:
explicit Qt3DWidget(QWidget *parent = nullptr);
};
Qt3DWidget::Qt3DWidget(QWidget *parent)
: QWidget(parent)
{
auto view = new Qt3DExtras::Qt3DWindow();
// put Qt3DWindow into a container in order to make it possible
// to handle the view inside a widget
container = createWindowContainer(view,this);
// ... further stuff goes here
}