2013-02-28 3 views
3

Я работаю с QTableView, и я хотел бы разработать расширенный режим выбора. Мне не удалось это сделать с SelectionBehavior и с SelectionMode.расширенный выбор QTableView

Пользователь должен иметь возможность забрать некоторые клетки, но только если они принадлежат к одной и той же колонке:

  • VALID ПОВЕДЕНИЯ:

Select an entire column is OK Select some cells in the same column is OK

  • INVALID BEHAVIOR:

Select cells in several columns is NOT OK

Глазурь на торте было бы предотвратить последней строки (желтая) должны быть выбраны.

Есть ли решение?


EDIT - 2013/03/05

я не могу получить его работы:

ui->table->setSelectionBehavior(QAbstractItemView::SelectItems); 
ui->table->setSelectionMode(QAbstractItemView::MultiSelection); 

connect(ui->table->selectionModel(), SIGNAL(currentColumnChanged(QModelIndex,QModelIndex)), ui->table->selectionModel(), SLOT(clearSelection())); 

Что случилось с этим кодом? Я также пробовал QAbstractItemView::ExtendedSelection и QAbstractItemView::ContiguousSelection.

+1

Связанный вопрос: [Как ограничить выбор в QTableWidget] (http://stackoverflow.com/q/8658656/20984). –

+0

Отлично! Благодаря!! – Maxbester

ответ

2

Вы проверяли сигналы от QItemSelectionModel, особенно

[сигнал] QItemSelectionModel :: currentColumnChanged

может быть использован, чтобы начать новый выбор в случае, если текущий выбор будет распространяться на два столбца.

+0

Я не видел этот сигнал. Это может быть полезно, но когда этот сигнал испускается, как снять флажок с нежелательной ячейки? – Maxbester

+0

Вы, вероятно, отмените выбор всех ячеек, которые были выбраны до сих пор, в противном случае может быть трудно отменить выбор и начать новый выбор. Поэтому просто начните новый выбор только с выбранной пользователем ячейки. – Jens

+0

Да, вы правы, спасибо. Но у меня проблемы. 'selectionModel()' из моего 'QTableView' возвращает null. Поэтому я не могу подключиться к 'currentColumnChanged()'. Вам это знакомо? – Maxbester