Название: добавление QWindow в QWidget
Отправлено: nkment от Ноябрь 08, 2015, 12:37
Доброе время суток. Начал работать 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); }
|