Qt QML从同级文件夹导入项

Qt QML从同级文件夹导入项,qt,qml,qt-creator,Qt,Qml,Qt Creator,假设我的qml.qrc <RCC> <qresource prefix="/"> <file>main.qml</file> <file>Style.qml</file> </qresource> <qresource prefix="/components"> <file>Test.qml</file> </qresource> Test

假设我的
qml.qrc

<RCC>
<qresource prefix="/">
    <file>main.qml</file>
    <file>Style.qml</file>
</qresource>
<qresource prefix="/components">
    <file>Test.qml</file>
</qresource>
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:样式未定义


我知道导入声明是导致这种情况的原因,我尝试了几种不同的“可能”工作方式,但文档中缺少这方面的内容,我被卡住了。感谢您的帮助。

使用以下代码,我没有任何错误,并且看到了预期的视觉效果。如果您不能从这个工作示例中发现您的问题,我建议包括一个更完整的示例。注意,我在这里给出的所有路径都是相对于“根”项目目录的路径(例如main.cpp是“根”目录中的一个文件,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();
}
组件/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>

main.qml
Style.qml
组件/Test.qml

使用以下代码,我没有任何错误,并且可以看到预期的视觉效果。如果您不能从这个工作示例中发现您的问题,我建议包括一个更完整的示例。注意,我在这里给出的所有路径都是相对于“根”项目目录的路径(例如main.cpp是“根”目录中的一个文件,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();
}
组件/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>

main.qml
Style.qml
组件/Test.qml

谢谢您的回答,我试过了,但我的设置不起作用。我上面有一个更完整的例子。我从QtCreator使用Qt,没有子文件夹,但为了划分,我在项目中按前缀排序了文件。请参阅我对原始问题的评论。我给了你一个类似的回答;谢谢你的更新!谢谢你的回答,我试过了,但我的设置不起作用。我上面有一个更完整的例子。我从QtCreator使用Qt,没有子文件夹,但为了划分,我在项目中按前缀排序了文件。请参阅我对原始问题的评论。我给了你一个类似的回答;谢谢你的更新!我想问题出在我使用singleton时,我不知道搜索什么,但这似乎是一个常见的问题,导入singleton的方法在Ok中概述,感谢更新!我认为这不适用于您的原因是使用了单例类型。看起来您遇到的问题是,您需要一个用于Style的qmldir文件——在与Style.qml相同的目录中添加一个包含“singleton Style 1.0 Style.qml”的文件“qmldir”(&将其添加到同一位置的qrc),然后您的示例似乎可以工作。我还不确定这是一个bug还是正确的行为,我会尝试深入挖掘。更新目前这似乎是一个设计限制,我打开了一个bug来尝试修复或尝试更好地记录它。我认为问题在于我使用singleton,我不知道要搜索什么,但这似乎是一个常见的问题,导入单例的方法在Ok中有概述,谢谢更新!我认为这不适用于您的原因是使用了单例类型。看起来您遇到的问题是,您需要一个用于Style的qmldir文件——在与Style.qml相同的目录中添加一个包含“singleton Style 1.0 Style.qml”的文件“qmldir”(&将其添加到同一位置的qrc),然后您的示例似乎可以工作。我还不确定这是一个bug还是一个正确的行为,我将尝试深入挖掘。更新目前这似乎是一个设计限制,我打开了一个bug,要么尝试修复,要么尝试更好地记录它。