c++ - 使用共享 QItemSelectionModel 在 QListView 中进行意外的移位选择

标签 c++ qt

我有一个包含三个元素的 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/

相关文章:

c++ - OpenGL对象创建

c++ - 当 QTableWidget 中的单元格已更新时,如何更新 csv 文件?

c++ - 如何围绕 winApi 集成 C++ 类和对象?

c++ - 如何在没有 QT 应用程序的情况下使用 QTimer

linux - 使用 Qt 显示网络摄像头视频

c++ - 从模板类继承繁琐

c++ - 使用单个值初始化 std::vector - 重复或 push_back()?

Qt:QDockWidget停靠时的选项卡图标

c++ - 确定 QTreeWidget 列的可见大小

c++ - 在编译时验证对象是否创建为 shared_ptr