QML导入模块

问题描述 投票:3回答:2

我想在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

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

Config.qml

pragma Singleton
import QtQuick 2.0
QtObject {
    property int myVariable: 10
}

qmldir

singleton Config 1.0 Config.qml

当我想在MyModule文件中导入我的自定义模块asmain.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>

qt import qml qtquick2 prefix
2个回答
1
投票

来自documentation

模块的qmldir文件必须位于导入路径中反映URI点标识符字符串的目录结构中,其中标识符中的每个点(“。”)反映目录树中的子级别。例如,模块com.mycompany.mymodule的qmldir文件必须位于导入路径中某处的子路径com / mycompany / mymodule / qmldir中。

所以你应该将module MyModule更改为module Config或在特定路径中导入它:

import "./Config" as MyModule

0
投票

**问题在Arpegius的答案之后发生了变化以提出另一个问题,我回答了这个新问题。 **

这与qrc-prefix无关。 我相信你正在混合两种不同的方法来导入。


使用或不使用前缀,要导入模块,您需要相应地设置QtQuick引擎的导入路径。

在您的情况下,因为您的模块目录位于项目根目录中:

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。

© www.soinside.com 2019 - 2024. All rights reserved.