在qquickwidget中使用qml渲染3d模型

时间:2018-11-03 14:35:57

标签: c++ 3d qquickwidget

我在ubuntu 18.04中使用Qt 5.5.1,我想在qquickwidget中使用qml渲染3d模型(.obj格式),我使用setSource功能将qml文件绑定到qquickwidget,我的qml文件编码为bollow :

import Qt3D 2.0
import Qt3D.Renderer 2.0
import QtQuick 2.0
Entity {
     id: root
     Camera {
        id: camera
        projectionType: CameraLens.PerspectiveProjection
        fieldOfView: 45
        aspectRatio: _window.width / _window.height
        nearPlane: 0.1
        farPlane: 1000.0
        position: Qt.vector3d(0.0, 10.0, 20.0)
        viewCenter: Qt.vector3d(0.0, 0.0, 0.0)
        upVector: Qt.vector3d(0.0, 1.0, 0.0)
    }

property Material material

Mesh {
    id: trefoilMesh
    source: "../res/obj/model.obj"
}

Transform {
    id: j2Transform
...
}
}

但是当我跑步时,出现了一些错误: QQuickWidget仅支持加载从QQuickItem派生的根对象。 如果您的示例使用的是QML 2(例如qmlscene)和.qml文件, 加载了“ import QtQuick 1.0”或“ import Qt 4.7”,将发生此错误。 要使用“ import QtQuick 1.0”或“ import Qt 4.7”加载文件,请使用 Qt Quick 1模块中的QDeclarativeView类。

然后,我包装了qml body whit Item属性,诸如此类:

Item {
id: root
 Entity {
    id: sceneRoot

    Camera {
        id: camera
        projectionType: CameraLens.PerspectiveProjection
        fieldOfView: 45
        aspectRatio: _window.width / _window.height
        nearPlane: 0.1
        farPlane: 1000.0
        position: Qt.vector3d(0.0, 10.0, 20.0)
        viewCenter: Qt.vector3d(0.0, 0.0, 0.0)
        upVector: Qt.vector3d(0.0, 1.0, 0.0)
...
}

然后我得到另一个警告:ReferenceError:_window未定义,并且我得到了空输出。然后,我使用Qt3D :: Quick :: QQmlAspectEngine和QWindow渲染qml(不包装Item属性)作为qt示例,我无法在窗口上获得正确的模型,所以我认为我的qml文件是可以的。但是问题是我不能使用QWindow,我需要将3d模型渲染嵌入到程序中(已经有一个主窗口),有人可以帮助我该怎么做吗?非常感谢你!

0 个答案:

没有答案