Доброе время суток.
Начал работать c qt3d и столкнулся с такой проблемой
есть пример
basicshapes-cppкогда я переношу код из main.cpp в отдельный виджет формы,
в контейнере ничего не отрбражается, только белый фон.
Может кто знает, что еще надо добавить, чтоб содержимое контейнра перерисовывалось?
Widget3D::Widget3D(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget3D)
{
ui->setupUi(this);
Window *view = new Window();
QWidget *container = QWidget::createWindowContainer(view);
QSize screenSize = view->screen()->size();
container->setMinimumSize(QSize(200, 100));
container->setMaximumSize(screenSize);
// QWidget *widget = new QWidget;
QHBoxLayout *hLayout = new QHBoxLayout(ui->widget_1);
QVBoxLayout *vLayout = new QVBoxLayout();
vLayout->setAlignment(Qt::AlignTop);
hLayout->addWidget(container, 1);
hLayout->addLayout(vLayout);
// ui->widget_1->setWindowTitle(QStringLiteral("Basic shapes"));
Qt3D::QAspectEngine engine;
engine.registerAspect(new Qt3D::QRenderAspect());
Qt3D::QInputAspect *input = new Qt3D::QInputAspect;
engine.registerAspect(input);
engine.initialize();
QVariantMap data;
data.insert(QStringLiteral("surface"), QVariant::fromValue(static_cast<QSurface *>(view)));
data.insert(QStringLiteral("eventSource"), QVariant::fromValue(view));
engine.setData(data);
// Root entity
Qt3D::QEntity *rootEntity = new Qt3D::QEntity();
// Camera
Qt3D::QCamera *cameraEntity = new Qt3D::QCamera(rootEntity);
cameraEntity->setObjectName(QStringLiteral("cameraEntity"));
cameraEntity->lens()->setPerspectiveProjection(45.0f, 16.0f/9.0f, 0.1f, 1000.0f);
cameraEntity->setPosition(QVector3D(0, 0, -20.0f));
cameraEntity->setUpVector(QVector3D(0, 1, 0));
cameraEntity->setViewCenter(QVector3D(0, 0, 0));
input->setCamera(cameraEntity);
// FrameGraph
Qt3D::QFrameGraph *frameGraph = new Qt3D::QFrameGraph();
Qt3D::QForwardRenderer *forwardRenderer = new Qt3D::QForwardRenderer();
forwardRenderer->setCamera(cameraEntity);
forwardRenderer->setClearColor(QColor(QRgb(0x4d4d4f)));
frameGraph->setActiveFrameGraph(forwardRenderer);
// Setting the FrameGraph
rootEntity->addComponent(frameGraph);
// Scenemodifier
SceneModifier *modifier = new SceneModifier(rootEntity);
// Set root object of the scene
engine.setRootEntity(rootEntity);
// Create control widgets
QCommandLinkButton *info = new QCommandLinkButton();
info->setText(QStringLiteral("Qt3D ready-made meshes"));
info->setDescription(QStringLiteral("Qt3D provides several ready-made meshes, like torus, cylinder, cube and sphere."));
info->setIconSize(QSize(0,0));
QCheckBox *torusCB = new QCheckBox(ui->widget_1);
torusCB->setChecked(true);
torusCB->setText(QStringLiteral("Torus"));
QCheckBox *cylinderCB = new QCheckBox(ui->widget_1);
cylinderCB->setChecked(true);
cylinderCB->setText(QStringLiteral("Cylinder"));
QCheckBox *cuboidCB = new QCheckBox(ui->widget_1);
cuboidCB->setChecked(true);
cuboidCB->setText(QStringLiteral("Cuboid"));
QCheckBox *sphereCB = new QCheckBox(ui->widget_1);
sphereCB->setChecked(true);
sphereCB->setText(QStringLiteral("Sphere"));
vLayout->addWidget(info);
vLayout->addWidget(torusCB);
vLayout->addWidget(cylinderCB);
vLayout->addWidget(cuboidCB);
vLayout->addWidget(sphereCB);
// QObject::connect(torusCB, &QCheckBox::stateChanged,
// modifier, &SceneModifier::enableTorus);
// QObject::connect(cylinderCB, &QCheckBox::stateChanged,
// modifier, &SceneModifier::enableCylinder);
// QObject::connect(cuboidCB, &QCheckBox::stateChanged,
// modifier, &SceneModifier::enableCuboid);
// QObject::connect(sphereCB, &QCheckBox::stateChanged,
// modifier, &SceneModifier::enableSphere);
torusCB->setChecked(true);
cylinderCB->setChecked(true);
cuboidCB->setChecked(true);
sphereCB->setChecked(true);
// // Show window
// widget->show();
ui->widget_1->resize(1200, 800);
// Update the aspect ratio
QSize widgetSize = container->size();
float aspectRatio = float(widgetSize.width()) / float(widgetSize.height());
cameraEntity->lens()->setPerspectiveProjection(45.0f, aspectRatio, 0.1f, 1000.0f);
}