我有一个包含三个元素的 QListView:A、B、C。在 View 中选择 A。然后以编程方式选择 C:
selectionModel.setCurrentIndex(idxC, ItemSelectionModel::NoUpdate);
selectionModel.select(QItemSelection(idxC, idxC), QItemSelectionModel::ClearAndSelect);
现在元素 C 被选中并且当前在 View 中,没有任何标记 A 元素。之后,我移动并单击元素 B 并在 View 中获得 A、B 选择,而不是预期的 B、C。
知道如何处理这个吗?
这种情况可以在 qt 图表示例 ( http://developer.qt.nokia.com/doc/qt-4.8/itemviews-chart.html ) 中看到,其中两个 ListView 共享相同的选择模型:单击第一个 View ,单击第二个 View ,shift+单击第一个 View 得到意想不到的结果。
最佳答案
根据您描述的行为和一些代码审查,我能想到的最好的是 QAbstractItemView
根据先前的鼠标位置与当前选定的鼠标按下事件进行选择模型中的 index
。
要解决这个问题,您可能必须子类化 QListView
并重新实现 mousePressEvent
函数以更改行为。相反,您可以在选择 Item C
时简单地设置鼠标位置。
关于c++ - 使用共享 QItemSelectionModel 在 QListView 中进行意外的移位选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8833195/