Как мне сказать Qt всегда показывать редактор в QTableView? - PullRequest
7 голосов
/ 09 февраля 2009

У меня есть QTableView, для которого я хочу отображать последний столбец всегда в режиме редактирования. (Это QComboBox, где пользователь должен всегда иметь возможность изменять значение.)

Я думаю, что видел решение в документации Qt , но больше не могу его найти. Есть ли простой способ сделать это?

Я думаю, что мог бы заархивировать этот эффект, используя openPersistentEditor() для каждой ячейки, но я ищу лучший способ. (Например, указав его только один раз для всего столбца.)

Ответы [ 4 ]

4 голосов
/ 19 февраля 2009

Есть две возможности:

Использование setIndexWidget, но Trolltech пишет:

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

(И это нарушает шаблон Модель / Представление…)

Или используя метод делегата paint . Но здесь вы должны реализовать все, как включенные / отключенные элементы самостоятельно.

3 голосов
/ 23 февраля 2009

Один из способов получить поведение автоматического редактирования - вызвать функцию setEditTriggers () представления со значением QAbstractItemView :: AllEditTriggers.

Чтобы отобразить содержимое данного столбца определенным образом, взгляните на QAbstractItemView :: setItemDelegateForColumn (). Это позволит вам указать пользовательский делегат только для тех элементов, которые в нем нуждаются. Однако он не будет автоматически создавать виджет-редактор для каждого из них (в принципе их может быть тысячи), но вы можете использовать делегат для рендеринга каждого элемента таким образом, чтобы он выглядел как виджет-редактор.

0 голосов
/ 11 февраля 2009

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

0 голосов
/ 09 февраля 2009

Виртуальная функция QAbstractItemModel :: flags вызывается для проверки возможности редактирования элемента (см. Qt :: ItemIsEditable ). Взгляните на Создание редактируемой модели в документации Модель / Представление .

...