QML导入模块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QML导入模块相关的知识,希望对你有一定的参考价值。

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

答案

来自documentation

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

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

import "./Config" as MyModule
另一答案

**问题在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。

以上是关于QML导入模块的主要内容,如果未能解决你的问题,请参考以下文章

尝试将外部 QML 模块导入我的项目时出错

QML模块在项目中有哪些优势?

QML 模块在项目中的优势是啥?

导入 JavaScript 时如何在 QML 中使用绝对路径?

26.Qt Quick QML-RotationAnimationPathAnimationSmoothedAnimationBehaviorPauseAnimationSequential(代码片段

qml: 模块定义与使用