在基于qrc的qml项目中,我拥有Internal.qml
,我可以以Internal {}
格式进行除垢使用。
我还有一些外部/远程(任意位置)External.qml
,还需要能够以声明性的Internal.qml
格式使用Internal {}
。
但是,当我尝试加载External.qml
时,它会错误地显示该Internal is not a type
。
我尝试将qrc:/
添加到导入路径,但这似乎不起作用,我尝试的几个导入指令破解也没有。
期望当应用程序加载外部QML文件时,应该能够使用内部可用的QML类型似乎并不合理。我需要使用什么import
指令才能使它运行?
答案 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,则用于设置组件名称并设置为 为该组件解析的项目提供基本路径。
这可以解决问题,但我仍然愿意接受更“有机”的解决方案。