QML 导入模块
Posted
技术标签:
【中文标题】QML 导入模块【英文标题】:QML importing module 【发布时间】:2016-02-29 11:46:25 【问题描述】:我想在我的main.qml
文件中导入一个自定义模块。 Main.qml
位于我的 qml.qrc
资源的 "/"
前缀下。
我的自定义模块Config.qml
位于Config
子目录中。 (Config
目录是main.qml
所在的位置,即/path/to/main/Config/Config.qml
。
config.qml
和 qmldir
文件存储在 qml.qrc
文件中的前缀 myPrefix
下。
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
当我想在main.qml
文件中将我的自定义模块作为MyModule
导入时。
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>
【问题讨论】:
模块文件夹不应该和模块同名吗? 当我更改为模块 Config 时,也不适用于 import Config 1.0 【参考方案1】:来自documentation:
模块的 qmldir 文件必须驻留在导入路径内的目录结构中,该目录结构反映了 URI 点分标识符字符串,其中标识符中的每个点(“.”)反映了目录树中的一个子级别。例如,模块 com.mycompany.mymodule 的 qmldir 文件必须位于导入路径某处的子路径 com/mycompany/mymodule/qmldir 中。
所以你应该将module MyModule
更改为module Config
或在特定路径中导入:
import "./Config" as MyModule
【讨论】:
我认为问题是,我在 qml.qrc 文件中有一个 Config 目录的前缀,并且 import 语句还应该包括 qrc:/prefix/... 不知何故。但我不知道怎么做。可以在Config目录前写一个带前缀的例子吗? 我编辑了我原来的问题并添加了相关的 .qrc 文件【参考方案2】:** 在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。
【讨论】:
【参考方案3】:如果这对任何人来说仍然是一个问题,您可以右键单击文件并选择将文件添加到目录。然后选择要添加 qml 文件的目录。该目录应与主 qml 文件相同。这样做解决了我的问题
【讨论】:
以上是关于QML 导入模块的主要内容,如果未能解决你的问题,请参考以下文章