Модели имеют разные роли данных элемента для разных данных. Среди прочих есть Qt::DisplayRole
, Qt::EditRole
и Qt::UserRole
. В этом случае вы хотите отобразить что-то отличное от ваших фактических данных, поэтому добавьте новую роль, скажем, Qt::UserRole+1
, которая используется для вашего индекса.
Затем вы хотите, чтобы ваш делегат установил соответствующие данные в setModelData :
def setModelData(self, editor, model, index):
cbIndex = editor.currentIndex()
model.setData(index, cbIndex, Qt.UserRole+1)
# we want a nice displayable though
model.setData(index, countryIndexToDisplayable(cbIndex), Qt.DisplayRole)
Конечно, вы получите данные для установки в редакторе аналогичным образом:
def setEditorData(self, widget, index):
widget.setCurrentIndex(index.data(Qt.UserRole+1))
В зависимости от вашей модели и вида вы можете использовать Qt::EditRole
, который в значительной степени предназначен для этой цели. Если вы затем используете собственный тип для роли отображения, вам не нужно выполнять какие-либо пользовательские рисования, хотя вы можете, если хотите.