如何外包qml listview委托

时间:2016-02-08 13:39:03

标签: qt delegates qml qtquick2 qqmlcomponent

我的代表变得非常大。我想把它放在一个专门的文件中。我需要做些什么来完成这项工作?我需要清除特别是如何导入和实例化委托。对于未来的读者来说,完整的方法会很好。

1 个答案:

答案 0 :(得分:2)

您可以拥有一个属性property Component delegateComponent : Qt.createComponent("file.qml")并将其用作代理。或直接delegate: Qt.createComponent("file.qml")

您可以使用Loader作为委托,并将其source属性设置为所需的文件。这种额外的抽象级别允许列表中的不同项实例化不同的qml文件,实际上实现了不同的委托。

通常,您不需要导入任何内容,除非您的组件已注册为外部模块的一部分。 QML文件的一部分项目将起作用,不需要导入。

您可以单击委托组件的根对象(不是组件,而是单个允许的子组件),转到"重构"然后单击"将组件移动到单独的文件中#34;。这将导致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中甚至不一定,它也会隐式发生。所以最后两个也会像这样工作:

delegate: DelegateType { }

delegate: Loader { source: "DelegateType.qml"}