Задача состоит в том, что можно делать селект единичных ячеек, если выбрано больше одной ячеки - расщирить до целой строки.
Вариант 1, работает, но при сбросе селекшина назад в QAbstractItemView::SelectItems уже не ставится.
Вариант 2, не селектится больше одной ячейки.
Вариант 3, ничего не происходит совсем, но именно он мне и интересен, по моему самый рациональный.
Не стал закоментировать все варианты, чтоб была видна подсветка.
C++ (Qt)
class MyView : public QTableView
{
	...
public slots:
	void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
	...
}
 
void MyView::selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
{
	// [1]
	if (selectionModel()->selection().indexes().size() > 1){
		setSelectionBehavior(QAbstractItemView::SelectRows);
	} else {
		setSelectionBehavior(QAbstractItemView::SelectItems);
	}
 
	// [2]
	if (selectionModel()->selection().indexes().size() > 1){
		for (int i = 0; i < selected.indexes().size(); ++i){
			selectRow(selected.indexes().at(i).row());
		}
	}
 
	// [3]
	if (selectionModel()->selection().indexes().size() > 1){
		selectionModel()->select(selected, QItemSelectionModel::Rows);
	}
 
	QTableView::selectionChanged(selectionModel()->selection(), deselected);
}