2012-04-23 11 views
1

行と列の値を指定してqtableview内の特定のアイテムを編集する方法はありますか?たとえば、毎秒その値を増やしたいとします。ここに私のテーブルモデルがあります。おかげ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()")) 

答えて

2

はあなたのモデルに直接値をインクリメントし、モデルからdataChanged信号を発することができました。

たとえば、モデルクラスに次のようにメソッドを追加します。

def incrementData(row, column): 
    self.arraydata[row][column] += 1 
    idx = self.index(row, column) 
    self.emit(SIGNAL("dataChanged(QModelIndex,QModelIndex)"), idx, idx) 
+0

はあなたが私に例を与えることができますか?ありがとう、ちょうど私が必要なもの: – unice

+0

ありがとう – unice

関連する問題