gpt4 book ai didi

qt - 带有 ExtendedSelection 的 Qml TreeView 中的 selectedRows() 落后了一步

转载 作者:行者123 更新时间:2023-12-04 03:19:02 27 4
gpt4 key购买 nike

我在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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com