如何在 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 中编辑特定项目?的主要内容,如果未能解决你的问题,请参考以下文章

Qt - 如何展开或折叠我的 QTableView

一个 QStandardItemModel 用于不同的 QTableView、通用视图和特定视图

QT QTableView 使用委托

如何在 Qt 中使用 QFileSystemModel 设置文本颜色 QTableView?

QTableView中的可编辑复选框仅列

在 Qtableview 上设置具有颜色(红色/绿色/黄色)的特定单元格