我有一个名为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 类型,则一切正常。这是一个已知的限制,有什么解决方法吗?
如果您只需要任意数量的 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 的其他版本。