我想在QML Scene3D中添加一个C++ QEntity,如下所示:
//C++
class MapEntity : public Qt3DCore::QEntity {
public:
MapEntity( Qt3DCore::QEntity* parent ) : Qt3DCore::QEntity(parent) {
...
}
}
// QML
Scene3D {
MapEntity {
id: map
...
}
}
Run Code Online (Sandbox Code Playgroud)
可能吗?如果是的话,该怎么做?
或者也许可以创建C++场景(例如Qt3DExtras :: Qt3DWindow)并在QML中使用?
是的,可以在C ++代码中定义QEntity然后再使用它。该方法描述如下:
http://doc.qt.io/qt-5/qtqml-cppintegration-definetypes.html
首先,您要创建QEntity。球形例如:
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() {}
};
Run Code Online (Sandbox Code Playgroud)
然后将其注册为qml组件:
qmlRegisterType<MyEntity>("com.company.my", 1, 0, "MyEntity");
Run Code Online (Sandbox Code Playgroud)
并在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
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1804 次 |
| 最近记录: |