如何使用外部QML文件中的内部QML类型?

时间:2019-02-22 21:05:34

标签: qt import qml qtquick2

在基于qrc的qml项目中,我拥有Internal.qml,我可以以Internal {}格式进行除垢使用。

我还有一些外部/远程(任意位置)External.qml,还需要能够以声明性的Internal.qml格式使用Internal {}

但是,当我尝试加载External.qml时,它会错误地显示该Internal is not a type

我尝试将qrc:/添加到导入路径,但这似乎不起作用,我尝试的几个导入指令破解也没有。

期望当应用程序加载外部QML文件时,应该能够使用内部可用的QML类型似乎并不合理。我需要使用什么import指令才能使它运行?

2 个答案:

答案 0 :(得分:1)

您可以使用directory import statement(可以是绝对路径)

如果您的Internal.qml路径为qrc:/internal/Internal.qml,则可以在External.qml中执行以下操作:

import "qrc:/internal"

Internal {}

或者,您可以使用qmldir file定义自己的模块并进行常规的模块导入。

使用以下内容创建一个qrc:/internal/qmldir文件:

module internal
Internal 1.0 Internal.qml

然后,您需要在导入路径中添加qrc:/(在导入模块时,QML引擎会尝试为其列表中的每个导入路径打开<import-path>/<module-name>/qmldir)。

之后,您可以从External.qml进行此操作:

import internal 1.0

Internal {}

答案 1 :(得分:0)

一种解决方案(尽管有些次优)是使用Help

QQmlComponent

QQmlComponent c(engine); c.setData(readInTheRemoteQML, QUrl("qrc:/Test")); 部分的确允许外部文件正确解析内部类型。

  

如果提供了url,则用于设置组件名称并设置为   为该组件解析的项目提供基本路径。

这可以解决问题,但我仍然愿意接受更“有机”的解决方案。