可以使用 Component.createComponent() 动态加载内置 QML 组件
Possible to load built in QML components dynamically using Component.createComponent()
我想使用 FontLoader
QML 组件向我的应用程序添加字体。
我的第一个想法是使用 Repeater
,但它只支持 Item
个派生委托,FontLoader
不支持。
然后,我的下一个想法是使用 Component::createComponent(url)
函数动态创建 FontLoader
QML 组件,但是我应该在这里使用什么 url
?是否可以在不向 QT_INSTALL_DIR
中的 qml 文件提供 url
的情况下动态创建内置 QML 组件?
旁注:
我知道如果我继承 FontLoader
是可能的,但我想尽可能避免额外的代码。
我也知道可以使用 Component::createQmlObject()
从字符串创建组件,但我真的不想那样做。
您可以使用 Instantiator
而不是 Repeater
,它允许您动态创建对象,即使它们不是 Items
s。
如果您仍然想命令式执行,则必须使用 Component
:
Component {
id: fontLoaderComponent
FontLoader {}
}
//...
fontLoaderComponent.createObject(parent, {name : "Courier"}); //use it like this to create a new FontLoader
我想使用 FontLoader
QML 组件向我的应用程序添加字体。
我的第一个想法是使用 Repeater
,但它只支持 Item
个派生委托,FontLoader
不支持。
然后,我的下一个想法是使用 Component::createComponent(url)
函数动态创建 FontLoader
QML 组件,但是我应该在这里使用什么 url
?是否可以在不向 QT_INSTALL_DIR
中的 qml 文件提供 url
的情况下动态创建内置 QML 组件?
旁注:
我知道如果我继承 FontLoader
是可能的,但我想尽可能避免额外的代码。
我也知道可以使用 Component::createQmlObject()
从字符串创建组件,但我真的不想那样做。
您可以使用 Instantiator
而不是 Repeater
,它允许您动态创建对象,即使它们不是 Items
s。
如果您仍然想命令式执行,则必须使用 Component
:
Component {
id: fontLoaderComponent
FontLoader {}
}
//...
fontLoaderComponent.createObject(parent, {name : "Courier"}); //use it like this to create a new FontLoader