Qt 如何从外部QML文件使用内部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类型,这似乎不是不

在基于qrc的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文件的位置是任意的。