可以使用 Component.createComponent() 动态加载内置 QML 组件

Possible to load built in QML components dynamically using Component.createComponent()

我想使用 FontLoader QML 组件向我的应用程序添加字体。

我的第一个想法是使用 Repeater,但它只支持 Item 个派生委托,FontLoader 不支持。

然后,我的下一个想法是使用 Component::createComponent(url) 函数动态创建 FontLoaderQML 组件,但是我应该在这里使用什么 url?是否可以在不向 QT_INSTALL_DIR 中的 qml 文件提供 url 的情况下动态创建内置 QML 组件?

旁注: 我知道如果我继承 FontLoader 是可能的,但我想尽可能避免额外的代码。

我也知道可以使用 Component::createQmlObject() 从字符串创建组件,但我真的不想那样做。

您可以使用 Instantiator 而不是 Repeater,它允许您动态创建对象,即使它们不是 Itemss。

如果您仍然想命令式执行,则必须使用 Component :

Component {
    id: fontLoaderComponent
    FontLoader {}
}
//...
fontLoaderComponent.createObject(parent, {name : "Courier"}); //use it like this to create a new FontLoader