Расширенный выбор QTableView

Я работаю с QTableView и хотел бы разработать расширенный режим выбора. Мне не удалось сделать это ни с SelectionBehavior, ни с < a href="http://doc.qt.digia.com/4.6/qabstractitemview.html#SelectionMode-enum" rel="nofollow noreferrer">SelectionMode.

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

  • ДОПУСТИМЫЕ ПОВЕДЕНИЯ:

Выбрать весь столбец в порядкеВыбрать несколько ячеек в одном столбце можно

  • НЕДОПУСТИМОЕ ПОВЕДЕНИЕ:

Выбор ячеек в нескольких столбцах недопустим

Вишенкой на торте будет предотвращение выбора последней строки (желтой).

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


ИЗМЕНЕНИЕ – 05 марта 2013 г.

Я не могу заставить его работать:

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.


person Maxbester    schedule 28.02.2013    source источник
comment
Связанный вопрос: Как ограничить выбор в QTableWidget.   -  person Luc Touraille    schedule 28.02.2013


Ответы (1)


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

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

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

person Jens    schedule 28.02.2013
comment
Я не видел этого сигнала. Это может быть полезно, но когда этот сигнал испускается, как снять флажок с нежелательной ячейки? - person Maxbester; 28.02.2013
comment
Вы, вероятно, отмените выбор всех ячеек, которые были выбраны до сих пор, в противном случае может быть сложно отменить выбор и начать новый выбор. Так что просто начните новый выбор только с ячейки, выбранной пользователем прямо сейчас. - person Jens; 28.02.2013
comment
Да, ты прав, спасибо. Но у меня проблема. selectionModel() из моего QTableView возвращает ноль. Поэтому я не могу подключиться к currentColumnChanged(). Вам это знакомо? - person Maxbester; 28.02.2013
comment
Сначала вам нужно установить свою модель, после чего selectionModel() вернет действительную модель. Если вы запросите selectionModel() перед setModel(), вы получите null вместо действительной модели. - person Jens; 01.03.2013