QML导入模块

时间:2016-02-29 11:46:25

标签: qt import qml qtquick2 prefix

我想在main.qml文件中导入自定义模块。 Main.qml位于"/"资源的qml.qrc前缀下方。

我的自定义模块Config.qml位于Config子目录中。 (Config目录是main.qml所在的位置,即/path/to/main/Config/Config.qml

config.qmlqmldir文件存储在myPrefix文件中的前缀qml.qrc下。

Project
|- Config
    |- Config.qml
    |- qmldir
|- main.qml

我还根据必要的文档http://doc.qt.io/qt-5/qtqml-modules-identifiedmodules.html创建了一个qmldir文件。以下是我的Config.qmlqmldir个文件。

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>

3 个答案:

答案 0 :(得分:1)

来自documentation

  

模块的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文件相同。这样做解决了我的问题