Документы, похоже, предполагают, что мне нужно написать QAbstractItemDelegate и пользовательскую функцию рисования, но это кажется излишним, просто всплыть стандартный QCombobox в Qt :: EditRole.
Тебе не нужно заходить так далеко. Один из способов - создать подкласс QStyledItemDelegate
, а затем переопределить createEditor()
, чтобы он возвращал предварительно заполненное поле со списком. Его setEditorData
и setModelData
функций, вероятно, уже хватит, если вы используете базовые типы значений Qt.
Если вам нужно что-то более общее, работающее в разных моделях, вы можете создать QItemEditorFactory
, который связывает ваш редактор с правильным типом. Это также хорошо работает с пользовательскими типами.
Когда это указано вашим представлением EditTrigger
, ваше представление получит делегат, специфичный для ячейки, в которой вызывается редактирование, и вызовет delegate->createEditor(...)
, который может затем изменить размер поля со списком в соответствии с options
, а также установить текущую запись на значение, указанное моделью, хотя большая часть этого должна обрабатываться QStyledItemDelegate
. Таким образом, вам не придется беспокоиться о Qt::EditRole
напрямую, поскольку представление будет обрабатывать это.