[英]editing QTableView cell value
如何在编辑QTableView单元格时保留其原始值? 当我开始编辑单元格时,它会自动清除。 我到处搜索,找不到任何指向某个地方的指针。 我对模型视图的实现:
class BlockViewModel(QAbstractTableModel):
def __init__(self, structure, data):
QAbstractTableModel.__init__(self)
self._data = data
self._struct = structure
for i, s in enumerate(structure):
cmnt = s['comment']
name = cmnt if cmnt else s['name']
self.setHeaderData(i, Qt.Horizontal, name)
def rowCount(self, parent=QModelIndex()):
return len(self._data)
def columnCount(self, parent = QModelIndex()):
return len(self._struct)
def data(self, index, role):
if role == Qt.DisplayRole:
try:
row = index.row()
col = index.column()
name = self._struct[col]['name']
return self._data[row][name]
except:
pass
elif role == Qt.CheckStateRole:
return None
return None
def flags(self, index):
flags = super(self.__class__,self).flags(index)
flags |= Qt.ItemIsEditable
flags |= Qt.ItemIsSelectable
flags |= Qt.ItemIsEnabled
flags |= Qt.ItemIsDragEnabled
flags |= Qt.ItemIsDropEnabled
return flags
def headerData(self, section, orientation, role = Qt.DisplayRole):
if role != Qt.DisplayRole:
return None
if orientation == Qt.Horizontal:
cmnt = self._struct[section]['comment']
return cmnt if cmnt else self._struct[section]['name']
else:
return str(section)
def setData(self, index, value, role=Qt.EditRole):
row = index.row()
col = index.column()
name = self._struct[col]['name']
self._data[row][name] = value
self.emit(SIGNAL('dataChanged()'))
return True
data
方法负责始终显示您的数据。 在编辑时,它使用EditRole
。 因此,修改data
方法以在EditRole
显示与DisplayRole
相同的值,如下所示:
def data(self, index, role):
if role == Qt.DisplayRole or role == Qt.EditRole:
try:
row = index.row()
col = index.column()
name = self._struct[col]['name']
return self._data[row][name]
except:
pass
elif role == Qt.CheckStateRole:
return None
return None
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.