我希望能够在使用itemData
填充时设置combobox
的{{1}}。但是,我只能从模型的QAbstractTableModel
方法中返回一个字符串。
通常,在不使用模型时,可以这样执行:
data
如何做到这一点,但使用# Set text and data
combobox.addItem('Some text', 'some item data')
# Retrieve data from selected
item_data = combobox.itemData(combobox.currentIndex())
?
我有QAbstractTableModel
,我将模型设置为:
combobox
我的模特:
model = ProjectTableModel(projects)
combobox.setModel(model)
答案 0 :(得分:2)
QComboBox
总是使用模型来存储其数据。如果您没有自己设置模型,它将创建自己的QStandardItemModel
。诸如addItem
和itemData
之类的方法只使用已设置的任何基础模型来存储和检索值。默认情况下,组合框使用Qt.UserRole
在项目中存储项目数据。所以你的模型只需要做这样的事情:
def data(self, index, role):
row = index.row()
column = index.column()
if role == QtCore.Qt.DisplayRole and column == 0:
project = self._projects[row]
name = project.name()
return name
elif role == QtCore.Qt.UserRole and column == 0:
project = self._projects[row]
id = project.id()
return id
def setData(self, index, value, role):
row = index.row()
column = index.column()
if role == QtCore.Qt.UserData and column == 0:
project = self._projects[row]
project.setId(value) # or whatever