如何在运行时使用 PYQT 向 QAbstractTable 模型插入新列

问题描述

我创建了一个 QAbstractTableModel 类型的模型类,我向其中添加了许多方法,如下所示:

class resultsModel(QAbstractTableModel):
    def __init__(self,parent,headerData,arraydata,*args):
        QAbstractTableModel.__init__(self,*args)
        self.arraydata = arraydata
        self.headerdata = headerData #['Timestamp','Force (N)','Diplacement (mm)']
    
    def rowCount(self,parent):
        return len(self.arraydata)

    def columnCount(self,parent):
        if len(self.arraydata) > 0: 
            return len(self.arraydata[0]) 
        return 0
        
    def headerData(self,col,orientation,role):
        if orientation == Qt.Horizontal and role == Qt.DisplayRole:
            return self.headerdata[col]
        return None
    
    #Make table cells non-editable
    def flags(self,index):
        return Qt.ItemIsEnabled | Qt.ItemIsSelectable   

    def data(self,index,role):
        if not index.isValid():
            return None
        value = self.arraydata[index.row()][index.column()]    
        if role == Qt.EditRole:
            return value
        elif role == Qt.DisplayRole:
            return value

    def setData(self,value,role):
        if not index.isValid():
            return None
        row = index.row()
        column = index.column()
        self.arraydata[row][column] = value
        self.dataChanged.emit(index,index)
        return True
        
    def setHeaderData(self,role):
        if role != Qt.DisplayRole or orientation != Qt.Horizontal:
            return False

        self.headerdata[col] = value
        result = self.headerdata[col]
        if result:
            self.headerDataChanged.emit(orientation,col)
        
        return result

当应用程序启动时,我使用 QTableview 和上面的模型:

resultsHeaders = ['Timestamp','Diplacement (mm)']
resultsData = [['','','']]
self.resultsTableModel = resultsModel(self,resultsHeaders,resultsData)
self.resultsTable = QTableView()
self.resultsTable.setModel(self.resultsTableModel)

在运行时,如果连接了串行设备,我想向模型添加一些额外的列,但在添加新标头值之前,我很难为模型实现“insertColumns”方法。

#insert columns
???
#update header values
for i in range(len(resultsHeaders)):            
    self.resultsTable.model().setHeaderData(i,Qt.Horizontal,str(resultsHeaders[int(i)]),Qt.DisplayRole)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)