如何外包 qml listview 委托
Posted
技术标签:
【中文标题】如何外包 qml listview 委托【英文标题】:How to outsource qml listview delegate 【发布时间】:2016-02-08 13:39:02 【问题描述】:我的代表长大了。我想把它放在一个专用文件中。我该怎么做才能完成这项工作?我需要澄清,特别是关于如何导入和实例化委托。对于未来的读者来说,一个完整的操作指南就可以了。
【问题讨论】:
【参考方案1】:您可以拥有一个属性property Component delegateComponent : Qt.createComponent("file.qml")
并将其用作委托。或者直接delegate: Qt.createComponent("file.qml")
。
您可以为委托使用Loader
,并将其source
属性设置为所需的文件。这种额外的抽象层允许列表中的不同项目实例化不同的 qml 文件,实际上实现了不同的委托。
通常,您不需要导入任何内容,除非您的组件已注册为外部模块的一部分。项目中的 QML 文件部分可以正常工作,不需要导入。
您可以单击委托组件的根对象(不是组件,而是其单个允许的子组件),转到“重构”并单击“将组件移动到单独的文件中”。这将产生一个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"
【讨论】:
以上是关于如何外包 qml listview 委托的主要内容,如果未能解决你的问题,请参考以下文章
如何在 QML 中访问 ListView 的 ListModel 的 ListElement 的映射委托数据?
如何从 QML 中的 GridView 或 ListView 获取实例化的委托组件