使用 Qt.createQmlObject() 创建自定义 qml 对象实例

Rud*_*ing 3 qt qt4 qml

我有一个名为Target.qml. 我想使用Qt.createQmlObject().

它在使用内置 qml 对象(如 Image)时有效:

var newTarget = Qt.createQmlObject('import Qt 4.7; Image {source: "widgets/SlideSwitchImages/knob.png"; }', parent);
Run Code Online (Sandbox Code Playgroud)

但是在使用任何自定义对象类型时失败,例如:

var newTarget = Qt.createQmlObject('import Qt 4.7; Target {}', parent);
Run Code Online (Sandbox Code Playgroud)

但是,如果我在 QML 中静态使用我的自定义 Target 类型,则一切正常。这是一个已知的限制,有什么解决方法吗?

bla*_*raz 5

如果您只需要任意数量的 Target 实例,最好使用 Component。

Component {
    id: targetFactory
    Target {}
}

var newTarget = targetFactory.createObject(parent, properties)
Run Code Online (Sandbox Code Playgroud)

但是,如果您想坚持使用 Qt.createQmlObject 调用,我猜您在不同的目录中有 Target 组件,而您只是错过了一些导入语句。字符串参数必须是一个 QML 文件的内容,该文件与调用它的文件位于同一目录中。

例如

var newTarget = Qt.createQmlObject('import QtQuick 1.0; import "../Targets"; Target {}', parent);
Run Code Online (Sandbox Code Playgroud)

顺便说一句:不推荐使用 Qt 4.7 导入,因为它们不允许 QtQuick 的其他版本。