2016-08-09 8 views
2
私はQML Scene3DにC++ QEntityを追加したい

をScene3D:それは可能使用Qt3D QEntityはこのように、

//C++ 
class MapEntity : public Qt3DCore::QEntity { 
    public: 
    MapEntity(Qt3DCore::QEntity* parent) : Qt3DCore::QEntity(parent) { 
     ... 
    } 
} 

// QML 
Scene3D { 
    MapEntity { 
     id: map 
     ... 
    } 
} 

ですか?もしそうなら、それをどうやるの?

また、C++シーン(Qt3DExtras :: Qt3DWindowなど)を作成し、QMLで使用することは可能でしょうか?

答えて

3

はい、QEntityをC++コードで定義して使用することは可能です。この方法は、ここで説明されて:あなたはQEntityを作成しているすべての

http://doc.qt.io/qt-5/qtqml-cppintegration-definetypes.html

まず。例えばスフィア:

class MyEntity : public Qt3DCore::QEntity { 
    public: 
     MyEntity(Qt3DCore::QEntity* parent=0) : Qt3DCore::QEntity(parent) { 
       Qt3DRender::QMaterial *material = new Qt3DExtras::QPhongMaterial; 

       Qt3DExtras::QSphereMesh *sphereMesh = new Qt3DExtras::QSphereMesh; 
       sphereMesh->setRadius(8); 

       addComponent(sphereMesh); 
       addComponent(material); 
     } 
     virtual   ~MyEntity() {} 
}; 

その後QMLコンポーネントとして登録:

qmlRegisterType<MyEntity>("com.company.my", 1, 0, "MyEntity"); 

そして、ちょうどQMLでそれを使用します。

Scene3D { 
    id: myScene 
    anchors.fill: parent 
    cameraAspectRatioMode: Scene3D.AutomaticAspectRatio 
    focus: true 
    enabled: true 



    Entity { 
     id: sceneRoot 

     Quick.Camera { 
      id: camera 
      projectionType: Quick.CameraLens.PerspectiveProjection 
      fieldOfView: 45 
      nearPlane : 0.1 
      farPlane : 1000.0 
      position: Qt.vector3d(0.0, 0.0, 40.0) 
      upVector: Qt.vector3d(0.0, 1.0, 0.0) 
      viewCenter: Qt.vector3d(0.0, 0.0, 0.0) 
     } 

     components: [ 
      Quick.RenderSettings { 
       activeFrameGraph: ForwardRenderer { 
        clearColor: Qt.rgba(0, 0.5, 1, 0) 
        camera: camera 
       } 
      } 
     ] 

     MyEntity { 
      id: myEnt 
     } 
    } 
} 
+1

これはリンクのみの回答にちょっと近い次のとおりです。http ://stackoverflow.com/help/how-to-answer答えとして、最小限の完全な例を作ることができます(C++およびQMLスニペット)。 – Mitch

+0

@kamilあなたは適切な例を共有できますか? –

関連する問題