我想在main.qml
文件中导入自定义模块。 Main.qml
位于"/"
资源的qml.qrc
前缀下方。
我的自定义模块Config.qml
位于Config
子目录中。 (Config
目录是main.qml
所在的位置,即/path/to/main/Config/Config.qml
。
config.qml
和qmldir
文件存储在myPrefix
文件中的前缀qml.qrc
下。
Project
|- Config
|- Config.qml
|- qmldir
|- main.qml
我还根据必要的文档http://doc.qt.io/qt-5/qtqml-modules-identifiedmodules.html创建了一个qmldir
文件。以下是我的Config.qml
和qmldir
个文件。
Config.qml
pragma Singleton
import QtQuick 2.0
QtObject {
property int myVariable: 10
}
qmldir
singleton Config 1.0 Config.qml
当我想在MyModule
文件中将我的自定义模块导入main.qml
时。
import "???" as MyModule
我该怎么做?有人有建议吗?
修改
qrc文件
<RCC>
<qresource prefix="/">
<file>main.qml</file>
</qresource>
<qresource prefix="/myPrefix">
<file>Config/qmldir</file>
<file>Config/Config.qml</file>
</qresource>
答案 0 :(得分:1)
模块的qmldir文件必须位于导入路径中反映URI点标识符字符串的目录结构中,其中标识符中的每个点(“。”)反映目录树中的子级别。例如,模块com.mycompany.mymodule的qmldir文件必须位于导入路径中某处的子路径com / mycompany / mymodule / qmldir中。
因此,您应该将module MyModule
更改为module Config
或将其导入特定路径:
import "./Config" as MyModule
答案 1 :(得分:0)
** 问题在Arpegius回答问题后发生了另一个问题,我回答了这个新问题。 **
这与 qrc-prefix 无关 我相信你要混合两种不同的方法来导入。
有或没有前缀,要导入模块,您需要相应地设置QtQuick引擎的 import-path 。
在您的情况下,因为您的模块目录位于项目根目录中:
engine.addImportPath("qrc:/");
// Now engine will look for subfolders which could be modules == with a qmldir
在main.qml中,使用前缀路径而不是文件系统路径进行导入:
import myPrefix 1.0 as MyNamespace
您也可以导入简单的QML文件而不是模块:
// Because the path is relative to main.qml even in a qrc
import "myPrefix" as MyNamespace
然后你根本不需要qmldir。
答案 2 :(得分:0)
如果这仍然是任何人的问题,请右键单击该文件,然后选择“将文件添加到目录”。然后选择要在其中添加qml文件的目录。此目录应与主qml文件相同。这样做解决了我的问题