C++ 如何使用Qt3D设置多个视口而不必使用QML

C++ 如何使用Qt3D设置多个视口而不必使用QML,c++,qt,qt3d,C++,Qt,Qt3d,我想设置一个类似于 不必使用QML 目前,我有一个单一的视图: Qt3DExtras::Qt3DWindow* createView ( Qt3DCore::QEntity* rootEntity ) { Qt3DExtras::Qt3DWindow* view = new Qt3DExtras::Qt3DWindow(); Qt3DRender::QCamera* camera = view->camera(); camera->lens()->s

我想设置一个类似于 不必使用QML

目前,我有一个单一的视图:

Qt3DExtras::Qt3DWindow* createView ( Qt3DCore::QEntity* rootEntity ) {

    Qt3DExtras::Qt3DWindow* view = new Qt3DExtras::Qt3DWindow();

    Qt3DRender::QCamera* camera = view->camera();
    camera->lens()->setPerspectiveProjection ( 45.0f, 16.0f / 9.0f, 0.1f, 1000.0f );
    camera->setPosition ( QVector3D ( 0, 0, 10.0f ) );
    camera->setViewCenter ( QVector3D ( 0, 0, 0 ) );

    Qt3DExtras::QOrbitCameraController* manipulator = new Qt3DExtras::QOrbitCameraController ( rootEntity );
    manipulator->setLinearSpeed ( 5.0f );
    manipulator->setLookSpeed ( 180.f );
    manipulator->setZoomInLimit ( 5.0f );
    manipulator->setCamera ( camera );

    return view;
}

本质上,问题是如何将示例中提供的QML代码转换为C++。< /P> < P>您必须使用<代码> QVIEWPORT/<代码>类和<代码> StimeRealEdgReT> <代码>函数,以[ 0,0,1,1 ]。 像下面这样

//DECLARE A FRAME GRAPH
Qt3DRender::QFrameGraph *frameGraph = new Qt3DRender::QFrameGraph();
Qt3DRender::QTechniqueFilter *techniqueFilter = new Qt3DRender::QTechniqueFilter();

Qt3DRender::QViewport *viewport1 = new Qt3DRender::QViewport(techniqueFilter);
Qt3DRender::QViewport *viewport2 = new Qt3DRender::QViewport(techniqueFilter);
Qt3DRender::QViewport *viewport3 = new Qt3DRender::QViewport(techniqueFilter);
Qt3DRender::QViewport *viewport4 = new Qt3DRender::QViewport(techniqueFilter);

viewport1->setNormalizedRect(QRectF(0, 0, 0.5, 0.5));
viewport2->setNormalizedRect(QRectF(0.5, 0, 0.5, 0.5));
viewport3->setNormalizedRect(QRectF(0, 0.5, 0.5, 0.5));
viewport4->setNormalizedRect(QRectF(0.5, 0.5, 0.5, 0.5));

//SET ACTIVE FRAME GRAPH NODE TO YOUR WINDOW
your_qt3d_wndObject->setActiveFrameGraph(frameGraph->activeFrameGraph());

谢谢。如何将视口附着到主窗口?基于QML示例,视口有一个QCameraSelector子节点,并有一个单一视口作为父节点。如何将CameraSelector子节点附加到视口,将四个视口附加到主视口,最后将主视口附加到Qt3DWindow?可以在构造函数中传递父对象。QViewport::QViewport(Qt3DCore::QNode*parent=nullptr)您可以使用QFrameGraph。我会更新答案。看看链接,看起来这个例子可能有点过时了。在QT3D C++样本的新迭代中,他们放弃使用Qt3DCy::QasPetEngEngt和Qt3Drime:QFrasGrad似乎被重命名/删除。我可以设置主视图端口并将其附加到技术过滤器,但由于没有framegraph类,我无法将技术过滤器附加到framegraph,也无法更改Qt3DExtras::Qt3DWindow的当前帧图。以下是使用Qt3D提供的最新示例之一-