Пользовательский редактор в QAbstractTableModel - PullRequest
1 голос
/ 23 апреля 2010

У кого-нибудь есть пример использования QWidget в качестве редактора в QAbstractTableModel?
У меня есть столбец, который при редактировании должен создать QCombobox со списком вариантов.

Документы, похоже, предполагают, что мне нужно написать QAbstractItemDelegate и пользовательскую функцию рисования, но это кажется излишним, просто всплыть стандартный QCombobox в Qt :: EditRole.

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

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

Ответы [ 2 ]

4 голосов
/ 23 апреля 2010

Документы, похоже, предполагают, что мне нужно написать QAbstractItemDelegate и пользовательскую функцию рисования, но это кажется излишним, просто всплыть стандартный QCombobox в Qt :: EditRole.

Тебе не нужно заходить так далеко. Один из способов - создать подкласс QStyledItemDelegate, а затем переопределить createEditor(), чтобы он возвращал предварительно заполненное поле со списком. Его setEditorData и setModelData функций, вероятно, уже хватит, если вы используете базовые типы значений Qt.

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

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

1 голос
/ 23 апреля 2010

Вы пытались взглянуть на следующий пример из Qt:

Пример делегата Spin Box

Может быть, это даст вам более четкое представление о предмете!

Надеюсь, это немного поможет!

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