如何使用QAbstractTableModel(Model / View)将数据设置为QComboBox?

时间:2017-10-07 21:37:54

标签: python pyqt4 pyside pyqt5 pyside2

我希望能够在使用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)

1 个答案:

答案 0 :(得分:2)

QComboBox 总是使用模型来存储其数据。如果您没有自己设置模型,它将创建自己的QStandardItemModel。诸如addItemitemData之类的方法只使用已设置的任何基础模型来存储和检索值。默认情况下,组合框使用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