QML 从同级文件夹导入项目

QML import item from sibling folder

假设我的 qml.qrc

中有以下结构
<RCC>
<qresource prefix="/">
    <file>main.qml</file>
    <file>Style.qml</file>
</qresource>
<qresource prefix="/components">
    <file>Test.qml</file>
</qresource>

main.qml

import QtQuick 2.5
import QtQuick.Window 2.2
import QtQuick.Layouts 1.0
import QtQuick.Controls 2.0
import "components"
Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    Test {
        color: "red"
    }
}

Test.qml

import QtQuick 2.0
import ".."


Rectangle {
    width: Style.test * 200
    height: 200
}

Style.qml

import QtQuick 2.0
pragma Singleton

QtObject {

    property real test: 1.0
}

一段时间以来,我一直尝试使用 import "../"Test.qml 导入 Style.qml,但我一直收到 ReferenceError: Style is not defined

我知道 import 语句是造成这种情况的原因,我尝试了 "might" 工作的几种不同变体,但文档中缺少这方面的内容,我被卡住了。帮助表示赞赏。

使用下面的代码,我没有错误,并且看到了预期的视觉结果。如果您无法从这个工作示例中发现问题,我建议包括一个更完整的示例。请注意,我在这里给出的所有路径都是相对于 "root" 项目目录(例如 main.cpp 是 "root" 中的一个文件,components/Test.qml 位于 "components" 子目录):

main.cpp:

#include <QQmlApplicationEngine>
#include <QGuiApplication>

int main(int argc, char **argv) {
    QGuiApplication app(argc, argv);
    QQmlApplicationEngine qAppEngine(QUrl("qrc:/main.qml"));
    return app.exec();
}

main.qml

import "components"

Test {

}

components/Test.qml:

import ".."

Style {

}

Style.qml:

import QtQuick 2.6
import QtQuick.Window 2.2

Window {
    visible: true
    width: 500
    height: 500
    color: "red"
}

使用以下内容构建:

test.pro:

QT += quick qml
RESOURCES += test.qrc
SOURCES += main.cpp

test.qrc:

<!DOCTYPE RCC><RCC version="1.0">
<qresource>
    <file>main.qml</file>
    <file>Style.qml</file>
    <file>components/Test.qml</file>
</qresource>
</RCC>