Qt 如何从外部QML文件使用内部QML类型?
在基于qrc的qml项目中,我有Qt 如何从外部QML文件使用内部QML类型?,qt,import,qml,qtquick2,Qt,Import,Qml,Qtquick2,在基于qrc的qml项目中,我有Internal.qml,我可以在Internal{}格式中使用它 我还有一些外部/远程(任意位置)external.qml,它还需要能够以声明式Internal{}格式使用Internal.qml 但是,当我尝试加载External.qml时,会错误地发现Internal不是一个类型 我尝试将qrc://添加到导入路径中,但它似乎不起作用,我尝试的几个导入指令hack也不起作用 当应用程序加载一个外部QML文件时,它应该能够使用内部可用的QML类型,这似乎不是不
Internal.qml
,我可以在Internal{}
格式中使用它
我还有一些外部/远程(任意位置)external.qml
,它还需要能够以声明式Internal{}
格式使用Internal.qml
但是,当我尝试加载External.qml
时,会错误地发现Internal不是一个类型
我尝试将qrc://
添加到导入路径中,但它似乎不起作用,我尝试的几个导入指令hack也不起作用
当应用程序加载一个外部QML文件时,它应该能够使用内部可用的QML类型,这似乎不是不合理的。我需要使用什么import
指令才能运行此命令 一种解决方案(尽管有点次优)是使用QQmlComponent
:
QQmlComponent c(engine);
c.setData(readInTheRemoteQML, QUrl("qrc:/Test"));
“qrc:/Test”
部分允许外部文件正确解析内部类型
如果提供了url,则该url用于设置组件名称和
为此组件解析的项提供基本路径
这确实有效,但我仍然愿意接受更“有机”的解决方案。您可以使用a(它可以是一条绝对路径)
如果Internal.qml
路径为qrc:/Internal/Internal.qml
,则可以在External.qml
中执行以下操作:
import "qrc:/internal"
Internal {}
import internal 1.0
Internal {}
或者,您可以使用定义自己的模块,并执行正常的模块导入
创建包含以下内容的qrc:/internal/qmldir
文件:
module internal
Internal 1.0 Internal.qml
然后需要将qrc://
添加到导入路径中(导入模块时,QML引擎会尝试为其列表中的每个导入路径打开//qmldir
)
之后,您可以从External.qml
执行此操作:
import "qrc:/internal"
Internal {}
import internal 1.0
Internal {}
导入“相对路径”
?@AlexanderV不可能,外部qml文件的位置是任意的。