我在ExtendedSelection模式下使用QTableView和SelectItems行为
我想实现以下行为:
1)当只选择一个单元格时 - 什么都不做
2)当选择多个单元格时 - 为每个选定单元格选择完整行。
以下是一个例子:
void BaseTableView::selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
{
QTableView::selectionChanged(selected, deselected);
QItemSelection currentSelection = selectionModel()->selection();
//table has selection
if(!currentSelection.isEmpty())
{
QItemSelectionRange selectionRange = currentSelection.first();
//select whole row if more than one cell is selected
if(currentSelection.count() > 1 || selectionRange.height() > 1 || selectionRange.width() > 1)
{
if(!deselected.isEmpty())
selectionModel()->select(deselected, QItemSelectionModel::Deselect | QItemSelectionModel::Rows);
if(!selected.isEmpty())
selectionModel()->select(currentSelection, QItemSelectionModel::Select | QItemSelectionModel::Rows);
}
}
}
此代码以某种方式有效。但我找不到更好的解决方案
问题:
1)使用鼠标时选择闪烁。可能是由于selectionChanged
的双重调用或类似的事情
2)使用Shift键选择不起作用。当按下Shift键的选择区域被更改时deselected
始终为空。所以选择总是增加。
实施所述行为的更好解决方案是什么?
如何使用按下的Shift
键修复选择?
答案 0 :(得分:0)
我找到了另一个解决方案。
我重新实现了select()
QItemSelectionModel
方法。比足以做一些检查并将Rows
标志添加到初始标志。