QT / QML Singleton未定义参考

时间:2017-04-27 21:17:04

标签: qt qml

我有一个包含一些可重用的应用程序范围数据的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未定义未定义?

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这是一种奇怪的行为,但我最终想出来了(据我所知,没有记载)

我必须创建一个新的QML子目录:

<强> qml.qrc /应用 - 数据: /applicationdata/CApplicationData.qml /applicationdata/qmldir

qmldir的内容设置为: singleton ApplicationData 1.0 CApplicationData.qml 并将这两个文件添加到我的qml.qrc

这也要求我将其他.qml文件中的引用更新为:

import "qrc:/applicationdata/."