我在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模型渲染嵌入到程序中(已经有一个主窗口),有人可以帮助我该怎么做吗?非常感谢你!