Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Flakes от Ноябрь 02, 2009, 23:40



Название: Расширить выборку ячеек до строк
Отправлено: Flakes от Ноябрь 02, 2009, 23:40
Задача состоит в том, что можно делать селект единичных ячеек, если выбрано больше одной ячеки - расщирить до целой строки.

Вариант 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);
}