我有一个包含一些可重用的应用程序范围数据的QML文件:
CApplicationData.qml:
pragma Singleton
import QtQuick 2.6
/**
* Singleton object to store all application data to be shared between different .qml files.
* These objects are received from the cloud or they can be application specific global data.
*/
QtObject {
...
property var userObject
}
我已定义qmldir
文件,如下所示:
qmldir
singleton ApplicationData 1.0 CApplicationData.qml
并将其导入每个我想引用它的QML文件中:
CUserEditView.qml :
import QtQuick 2.6
import "." // QTBUG-34418, singletons require explicit import to load qmldir file
Component.onCompleted {
Console.log('ApplicationData: '+ApplicationData.userObject)
}
这很好用(大多数地方),当我在我的开发机器QtCreator上调试时,我可以看到 UserView.qml 中定义的值,在我显示它之后(作为模态):
var component = Qt.createComponent("CUserEditView.qml");
var obj = component.createObject(rootWindow, {});
但是,当我编译并使用qtwindeploy
时,我发现当我尝试取消引用ApplicationData.userObject
时,ApplicationData.userObject
内的CUserEditView
未定义未定义?
有什么想法吗?
答案 0 :(得分:1)
这是一种奇怪的行为,但我最终想出来了(据我所知,没有记载)
我必须创建一个新的QML子目录:
<强> qml.qrc /应用 - 数据:强>
/applicationdata/CApplicationData.qml
/applicationdata/qmldir
将qmldir
的内容设置为:
singleton ApplicationData 1.0 CApplicationData.qml
并将这两个文件添加到我的qml.qrc
这也要求我将其他.qml
文件中的引用更新为:
import "qrc:/applicationdata/."