- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在qml中有一个treeview,选择模式是ExtendedSelection。每当用户更改所选索引时,我都需要确切地知道选择了哪些树行。这是 TreeView :
Controls.TreeView {
id: myTreeView
Controls.TableViewColumn {
title: "Name"
role: "name"
}
headerVisible: false
anchors.fill: parent
selection: ItemSelectionModel {
onCurrentIndexChanged: {
console.log(myTreeView.selection.selectedRows(0))
console.log(currentIndex)
}
}
selectionMode: Controls.SelectionMode.ExtendedSelection
onDoubleClicked: {
if (isExpanded(index))
collapse(index);
else
expand(index);
}
}
在上面的示例中,我只是尝试将选定的行打印到控制台以确保我有正确的选择。 currentIndex
始终保存最后选择的索引(正如预期的那样),但是应该保存当前选择的所有行的 selection.selectedRows()
始终是一步在后面。例如:
如果用户(同时按住 Ctrl)逐行选择行 1, 2, 3
selection.selectedRows()
将为 null, "1", "1,2"
和 currentIndex
将分别为 1, 2, 3
。将这两者结合在一起,就可以得到所有处于选中状态的索引的列表。我的问题是,如果用户释放 Ctrl 键并选择 4
行,则 selection.selectedRows()
将为 "1,2,3"
虽然它应该是 null
。总而言之,无法区分用户选择(按住 Ctrl)行 1,2,3,4
的情况和用户首先选择行(按住 Ctrl) 的情况1,2,3
然后松开 Ctrl 并选择行 4
。
我也用 myTreeView.selection.selectedIndexes
进行了测试,但仍然是相同的行为。对我来说,它看起来像是 TreeView 中的一个错误,请指教如何解决。
谢谢。
最佳答案
您应该使用 onSelectionChanged
而不是 onCurrentIndexChanged
。使用该信号,您可以获得选定索引的列表。
我不知道你的整个代码,但使用 File System Browser Qt提供的示例,您可以检查差异。
在那个例子中,替换
ItemSelectionModel {
id: sel
model: fileSystemModel
}
由
ItemSelectionModel {
id: sel
model: fileSystemModel
onSelectionChanged: {
console.log("onSelectionChanged - selectedRows: " + selectedIndexes)
}
onCurrentIndexChanged: {
console.log("onCurrentIndexChanged - selectedRows: " + selectedIndexes)
}
}
查看两种信号的工作原理。
关于qt - 带有 ExtendedSelection 的 Qml TreeView 中的 selectedRows() 落后了一步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39512994/
我在qml中有一个treeview,选择模式是ExtendedSelection。每当用户更改所选索引时,我都需要确切地知道选择了哪些树行。这是 TreeView : Controls.TreeVie
我是一名优秀的程序员,十分优秀!