Как мне сказать QT всегда показывать редактора в QtableView?

StackOverflow https://stackoverflow.com/questions/528366

  •  22-08-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

(И это разбивает модель/шаблон представления…)

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

Другие советы

Один из способов получить автоматическое поведение редактирования - это вызвать функцию View's SetDitTriggers () с помощью значения QaBstractIteMView :: alleditTriggers.

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

А Qabstractitemmodel::флаги Виртуальная функция вызывается для проверки, если элемент редактируется (см. Qt :: electinated) Взгляни на Сделать модель редактируемой в Модель/просмотр программирования документация.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top