0
SelectItems 동작을 사용하는 ExtendedSelection 모드에서 QTableView를 사용합니다.
다음 동작을 구현하고 싶습니다.
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 키를 사용한 선택이 제대로 작동하지 않습니다. Shift 키를 누른 상태에서 선택 영역을 변경하면
deselected
은 항상 비어 있습니다. 따라서 선택은 항상 증가합니다.
설명 된 동작을 구현하기위한 더 나은 솔루션은 무엇입니까?
Shift
키를 눌러 선택을 수정하는 방법은 무엇입니까?