Я использую QTableView в режиме ExtendedSelection с поведением SelectItems.
Я хотел бы реализовать следующие действия:
1) Когда выбрана только одна ячейка - ничего не делать
2) Когда выбрано более одной ячейки - выберите полную строку для каждой выбранной ячейки.QTableView, условный выбор строки в режиме ExtendedSelection
Вот пример:
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 не работает должным образом. При изменении области выбора с нажатой клавишей сдвига deselected
всегда пуст. Поэтому выбор всегда увеличивается.
Что такое лучшее решение для реализации описанного поведения?
Как исправить выбор нажатием клавиши Shift
?