ListView 模型函数
Posted
技术标签:
【中文标题】ListView 模型函数【英文标题】:ListView model function 【发布时间】:2016-04-14 14:07:14 【问题描述】:我刚刚开始使用 Qt,并尝试制作操作 ListView
模型元素的函数。
我在“myButton.qml”中有自定义按钮,其状态为“正常”、“按下”、“选定”等。
ListView
在“main.qml”中。结构是这样的:
ListView
//...
model: nameModel
delegate: myButton
//...
所以这是我的目标:这个按钮列表应该像一组单选按钮一样 - 只有一个可以具有选择状态,并且选择状态是当您按下按钮时。我认为我应该有点击处理程序和一个调用按钮点击的函数。函数应检查按钮列表,如果在函数之前选择了一个按钮,则将其状态更改为“正常”。
所以我不知道如何编写这个函数以及我应该把它放在哪里。我阅读了 Qt 文档,但仍然不知道。
【问题讨论】:
【参考方案1】:解决此问题的一种可能的简单方法是利用ExclusiveGroup
。正如documentation 中所讨论的,对这种类型的支持可以添加到 any 类型:
可以为对象或控件添加对 ExclusiveGroup 的支持。它应该有一个 checked 属性,以及一个 checkedChanged、toggled() 或 toggled(bool) 信号.在设置 ExclusiveGroup 类型属性时,还需要与 ExclusiveGroup::bindCheckable() 绑定。
您可以在ListView
级别定义ExclusiveGroup
,并在ListView
委托中实现所需的逻辑。通过将委托ExclusiveGroup
属性绑定到ListView
的ExclusiveGroup
,您应该可以实现您想要的,而无需抓取模型的函数。
最后一个演示用法的玩具示例:
import QtQuick 2.5
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
Window
id: root
visible: true
width: 200
height: 500
ListView
anchors.fill: parent
model: 10
spacing: 20
ExclusiveGroup id: ex // the group for all the delegate
delegate: Rectangle
id: delegate
width: ListView.view.width
height: 30
color: checked ? "yellow" : "steelblue"
// code to have exclusive behaviour
property bool checked: false
property ExclusiveGroup exclusiveGroup: ex
onExclusiveGroupChanged:
if (exclusiveGroup)
exclusiveGroup.bindCheckable(delegate)
// mouse area to trigger the property change
MouseArea
anchors.fill: parent
onClicked: checked = true
【讨论】:
感谢您提供了这么好的示例!看起来很容易理解。 我很高兴它有帮助。快乐编码! :)以上是关于ListView 模型函数的主要内容,如果未能解决你的问题,请参考以下文章
使用具有不同模型和 DataTemplates 的分组 ListView