Qt.createComponent
определено, чтобы принимать URL
в качестве аргумента, а не имя типа, поэтому нет, нет способа использовать Qt.createComponent(Type)
. Но я до сих пор не понимаю, что может быть от этого.
- Это не дает никакой гибкости, поскольку нет типа QML для передачи типов в качестве значений.
- Это не дает никакого выигрыша в производительности, так как
Qt.createComponent(URL)
также использует кеш компонента двигателей.
Также есть только несколько случаев использования, когда явное создание компонента JS с Qt.createComponent
- правильный путь, так как QML является декларативным языком, и большинство вещей можно сделать декларативным.
Рассмотрим следующие способы создания компонентов:
Если тип свойства Component
, вы можете использовать стандартный синтаксис для создания объектов. Автоматически создание объекта прекращается после шага createComponent
:
property Component someProperty: Item {
// This Item is not instantiated. Instead only a prototpye/component is created
// and bound to the property 'someProperty'
}
Оберните объект, который вы еще не хотите полностью создать, в Component
:
Component {
id: myComponent // Use this to reference the Component later.
Item {
// This Item is not instantiated. Instead only a prototpye/component is created
// You can reference it by the *Component's id*
}
}
Это также может быть использовано при назначении свойства:
property var someProperty: Component {
Item {
}
}
TL; DR
Нет - вы не можете передать тип функции в QML, поэтому вы также не можете сделать это с помощью Qt.createComponent
- особенно, если он указан для получения URL-адреса.
Если у вас все еще есть ощущение, что это будет необходимо, и любой из других способов создания Component
не соответствует вашим потребностям, пожалуйста, спросите еще раз и укажите, что вы пытаетесь сделать, и почему вы думаете, что это будет необходимо сделать это, и мы могли бы найти способ решить вашу реальную проблему.