2016-08-09 3 views
2

ich eine C++ QEntity zum QML Scene3D, wie diese hinzufügen möchten:Verwenden Qt3D QEntity in QML Scene3D

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

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

Ist es möglich? Und wenn ja, wie?

Oder ist es vielleicht möglich, C++ - Szene (Qt3DExtras :: Qt3DWindow zum Beispiel) zu erstellen und in QML zu verwenden?

Antwort

3

Ja, es ist möglich, QEntity in C++ - Code zu definieren und dann zu verwenden. Das Verfahren wird hier beschrieben:

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

Zu allererst Sie QEntity erstellen. Sphere zum Beispiel:

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() {} 
}; 

Dann registrieren Sie es als qml Komponente:

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

Und nur verwenden es in 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

Dies ist ein bisschen nah an einem Link-nur antworten: http : //stackoverflow.com/help/how-to-answer Sie könnten ein minimales vollständiges Beispiel als Antwort erstellen (C++ - und QML-Snippets). – Mitch

+0

@kamil können Sie bitte ein richtiges Beispiel teilen? –