栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

PyQt-如何使用QItemDelegate在表格视图中设置QComboBox

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PyQt-如何使用QItemDelegate在表格视图中设置QComboBox

您使用的

paint
方法不正确。当您要更改视图的显示行为时,应使用它。每次要绘制时也创建新的小部件非常昂贵。但是您想更改编辑行为,因此需要更改程序的整个逻辑。

请参阅固定代码。下面我将解释这些更改。

1.
首先,我们需要使第一列可编辑。您可以通过重新实现
QAbstractItemModel::flags

def flags(self, index):    if (index.column() == 0):        return QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled    else:        return QtCore.Qt.ItemIsEnabled

2.
默认情况下,当用户执行双击项目时,将创建项目编辑器。如果要默认显示所有组合框,则可以使用
openPersistentEditor

for row in range(0, self._tm.rowCount()):    self._tv.openPersistentEditor(self._tm.index(row, 0))

请注意,您还应该打开新创建的单元格的编辑器(如果有)。

3.
现在回到我们的代表。我们需要实现
createEditor
一种方法,该方法将在为单元格请求编辑器时由视图自动调用:

def createEditor(self, parent, option, index):    combo = QtGui.QComboBox(parent)    li = []    li.append("Zero")    li.append("One")    li.append("Two")    li.append("Three")    li.append("Four")    li.append("Five")    combo.addItems(li)    self.connect(combo, QtCore.SIGNAL("currentIndexChanged(int)"),       self, QtCore.SLOT("currentIndexChanged()"))    return combo

请注意,该

connect
值低于
append
s,因为我们需要避免
currentIndexChanged
在初始化时发出信号。

4.``setEditorData
更改模型数据后,视图将调用的Implement方法。初始化编辑器时,也会调用一次。

def setEditorData(self, editor, index):    editor.blockSignals(True)    editor.setCurrentIndex(int(index.model().data(index)))    editor.blockSignals(False)

再次,我们要避免不是由用户引起的信号,因此我们使用

blockSignals

5.
在插槽中,我们只是发出
commitData
信号,这将导致视图调用
setModelData
我们的委托的:

@QtCore.pyqtSlot()def currentIndexChanged(self):    self.commitData.emit(self.sender())

6.
实现
setModelData
方法:

def setModelData(self, editor, model, index):    model.setData(index, editor.currentIndex())

7.
您的模型需要支持数据更改。因此,我们应该实现
setData
模型的方法:

def setData(self, index, value, role=QtCore.Qt.DisplayRole):    print "setData", index.row(), index.column(), value    # todo: remember the data


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/610712.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号