无法访问位于同一目录中的 QML 单例

Posted

技术标签:

【中文标题】无法访问位于同一目录中的 QML 单例【英文标题】:Cannot access QML singleton residing in same dir 【发布时间】:2017-07-06 06:24:52 【问题描述】:

我收到此错误:

qrc:/qml/Accessor.qml:5: ReferenceError: MySingleton 未定义

我的项目结构:

| main.cpp
| main.qml
| qml/
+--- Accessor.qml
+--- MySingleton.qml
+--- qmldir

文件内容:

main.cpp:

#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])

    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();

main.qml

import QtQuick 2.6
import QtQuick.Window 2.2
import "qml/"

Accessor 

qml/Accessor.qml

import QtQml 2.2
//import qml 1.0

QtObject 
    property int foo: MySingleton.foo

qml/MySingleton.qml

pragma Singleton
import QtQml 2.2

QtObject 
    property int foo: 0

qml/qmldir

module qml

singleton MySingleton 1.0 MySingleton.qml

qml.qrc

<RCC>
    <qresource prefix="/">
        <file>main.qml</file>
        <file>qml/Accessor.qml</file>
        <file>qml/MySingleton.qml</file>
        <file>qml/qmldir</file>
    </qresource>
</RCC>

在 Accessor.qml 中取消注释 import qml 1.0 没有帮助。但是当 Accessor.qml 位于项目根目录时,它可以正常工作。

有什么想法吗?

【问题讨论】:

【参考方案1】:

解决方案:我必须将import "." 添加到Accessor.qml

【讨论】:

这是一个长期存在的错误。要么导入点,要么从 C++ 注册单例。 @dtech 我什至不知道 import "." 让您无需从 c++ 注册即可访问 pragma Singleton 对象。谢谢!

以上是关于无法访问位于同一目录中的 QML 单例的主要内容,如果未能解决你的问题,请参考以下文章

当我使用文件名作为路径时无法访问该文件,尽管该文件位于同一目录中

qml:无法访问滑块组件中的 styleData

无法通过快捷方式访问 QML 中的菜单项

无法使用从 python 中同一目录中的另一个文件访问的类

在子目录中无法访问会话变量

无法访问 XCTestCase Objective C 中的单例对象