在QML Scene3D中使用Qt3D QEntity
Use Qt3D QEntity in QML Scene3D
我想添加一个c++ QEntity到QML Scene3D,像这样:
//C++
class MapEntity : public Qt3DCore::QEntity {
public:
MapEntity( Qt3DCore::QEntity* parent ) : Qt3DCore::QEntity(parent) {
...
}
}
// QML
Scene3D {
MapEntity {
id: map
...
}
}
有可能吗?如果是,该怎么做?
或者可以创建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() {}
};
然后注册为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
}
}
}
相关文章:
- 使用C++在Qt3D中创建多个视口时出现问题
- 创建具有两个视口的Qt3D C++场景,其中显示适当的不同网格
- Qt3D 骨骼动画
- Qt3D: using Qt3DRender::QLayerFilter
- QT3D 中的 2D 网格
- 围绕特定轴对 qt3d 旋转进行动画处理
- Qt3D内存泄漏
- Qt3D:"Mesh is empty, nothing to load"消息
- 没有Qt3D的QCircularBuffer功能
- Qt3D 绘制线消耗太多内存
- 在Qt3D中进行碰撞检测的预期方法(或好方法)是什么?
- 如何将QImage从C++发送到QML到Qt3D实体以将其用作纹理?
- 在Qt3D中禁用抗锯齿
- Qt3d/C++ - 如何使用frameGraphe来实现大纲?
- QPaintedTextureImage in Qt3D (Qt 5.8)
- 访问 Qt3D 中的帧缓冲
- QT3D-如何不绘制网格
- 用QT3D绘制三角形
- 从Qt3D PickEvent获取漫反射贴图RGB数据
- 在QML Scene3D中使用Qt3D QEntity