如何在 qtableview 中编辑特定项目?
Posted
技术标签:
【中文标题】如何在 qtableview 中编辑特定项目?【英文标题】:how to edit specific item in qtableview? 【发布时间】:2012-04-23 08:48:01 【问题描述】:有没有办法在给定行和列值的情况下编辑 qtableview 中的特定项目?例如,我想每秒增加它的值。这是我的表格模型。谢谢
class MyTableModel(QAbstractTableModel):
def __init__(self, datain, headerdata, parent=None, *args):
""" datain: a list of lists
headerdata: a list of strings
"""
QAbstractTableModel.__init__(self, parent, *args)
self.arraydata = datain
self.headerdata = headerdata
def rowCount(self, parent):
return len(self.arraydata)
def columnCount(self, parent):
try:
return len(self.arraydata[0])
except:
return 0
def data(self, index, role):
if not index.isValid():
return QVariant()
elif role != Qt.DisplayRole:
return QVariant()
return QVariant(self.arraydata[index.row()][index.column()])
def headerData(self, col, orientation, role):
if orientation == Qt.Horizontal and role == Qt.DisplayRole:
return QVariant(self.headerdata[col])
return QVariant()
def sort(self, Ncol, order):
"""Sort table by given column number.
"""
self.emit(SIGNAL("layoutAboutToBeChanged()"))
self.arraydata = sorted(self.arraydata, key=operator.itemgetter(Ncol))
if order == Qt.DescendingOrder:
self.arraydata.reverse()
self.emit(SIGNAL("layoutChanged()"))
【问题讨论】:
【参考方案1】:您可以直接在模型中增加值,并从模型中发出dataChanged
信号。
例如,在模型类中添加这样的方法:
def incrementData(row, column):
self.arraydata[row][column] += 1
idx = self.index(row, column)
self.emit(SIGNAL("dataChanged(QModelIndex,QModelIndex)"), idx, idx)
【讨论】:
以上是关于如何在 qtableview 中编辑特定项目?的主要内容,如果未能解决你的问题,请参考以下文章
一个 QStandardItemModel 用于不同的 QTableView、通用视图和特定视图