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,要么尝试修复,要么尝试更好地记录它。