我的代表变得非常大 . 我想把它放在一个专门的文件中 . 我需要做些什么来完成这项工作?我需要清除特别是如何导入和实例化委托 . 对于未来的读者来说,完整的方法会很好 .
您可以拥有属性 property Component delegateComponent : Qt.createComponent("file.qml") 并将其用作委托 . 或直接 delegate: Qt.createComponent("file.qml") .
property Component delegateComponent : Qt.createComponent("file.qml")
delegate: Qt.createComponent("file.qml")
您可以使用 Loader 作为委托,并将其 source 属性设置为所需的文件 . 这种额外的抽象级别允许列表中的不同项实例化不同的qml文件,实际上实现了不同的委托 .
Loader
source
通常,除非将组件注册为外部模块的一部分,否则无需导入任何内容 . QML文件的一部分项目将正常工作,不需要导入 .
您可以单击委托组件的根对象(不在组件上,但是单个允许的子组件),转到"refactoring"并单击"move component into separate file" . 这将导致 Component { TheNewQMLFile { } } ,其中 TheNewQMLFile 将替换您提升为新源的对象树的内容 . 它也可以以这种形式工作,而不需要使用前两种技术 .
Component { TheNewQMLFile { } }
TheNewQMLFile
由于QML的动态范围,您可以使用外部QML文件中的模型角色,只要对象在正确的上下文中实例化,即作为具有模型的视图的委托,提供这些角色,它们将被解析 .
3种可能的方法:
delegate: Qt.createComponent("DelegateType.qml") delegate: Component { DelegateType { } } delegate: Component { Loader { source: "DelegateType.qml"} } // here source can come from a model role as well
实际上,似乎显然包装 Component 甚至不一定,它也是隐式发生的 . 所以最后两个也会像这样工作:
Component
delegate: DelegateType { } delegate: Loader { source: "DelegateType.qml"}
1 回答
您可以拥有属性
property Component delegateComponent : Qt.createComponent("file.qml")
并将其用作委托 . 或直接delegate: Qt.createComponent("file.qml")
.您可以使用
Loader
作为委托,并将其source
属性设置为所需的文件 . 这种额外的抽象级别允许列表中的不同项实例化不同的qml文件,实际上实现了不同的委托 .通常,除非将组件注册为外部模块的一部分,否则无需导入任何内容 . QML文件的一部分项目将正常工作,不需要导入 .
您可以单击委托组件的根对象(不在组件上,但是单个允许的子组件),转到"refactoring"并单击"move component into separate file" . 这将导致
Component { TheNewQMLFile { } }
,其中TheNewQMLFile
将替换您提升为新源的对象树的内容 . 它也可以以这种形式工作,而不需要使用前两种技术 .由于QML的动态范围,您可以使用外部QML文件中的模型角色,只要对象在正确的上下文中实例化,即作为具有模型的视图的委托,提供这些角色,它们将被解析 .
3种可能的方法:
实际上,似乎显然包装
Component
甚至不一定,它也是隐式发生的 . 所以最后两个也会像这样工作: