QTableView未在dataChanged上更新

2024-09-27 21:28:00 发布

您现在位置:Python中文网/ 问答频道 /正文

当模型数据更改时,我无法更新QTableView的布局。 我试过了数据更改.emit(索引,索引),使用layoutChanged.emit()以及作为最后手段,使用reset()。都没用。 我的代码:

class SettingsDialog(QDialog, settings_design.Ui_settingsDialog):
    def __init__(self):
        super(self.__class__, self).__init__()
        self.setupUi(self)
        self.weekdayTable = QTableView(self.weekdayPage)
        weekdayModel = self.loadMeetingData(self.meetingsData['weekdayList'])
      #weekdayModel.dataChanged.connect(self.updateTable)
        self.weekdayTable.setModel(weekdayModel)

    def updateTable(self):
        self.weekdayTable.repaint()

class MeetingsModel(QStandardItemModel):
    def __init__(self, data, columns):
        QStandardItemModel.__init__(self, data, columns)
        with open('meetings.config.json') as f:
            self.meetingsData = json.load(f)

    def setData(self, index, value, other):

        self.meetingsData['weekdayList'][int(index.row())][index.column()] = value
        with open('meetings.config.json', 'w+') as f:
            f.write(json.dumps(self.meetingsData))

        self.dataChanged.emit(index, index)
        # self.layoutChanged.emit(index, index)
        return True

我做错什么了?在


Tags: 数据selfjsonindexinitdefclassemit
1条回答
网友
1楼 · 发布于 2024-09-27 21:28:00

我最终用另一种方法解决了这个问题。在

旧方法(优雅的方法):

我扩展了QStandardModelItemsetData方法,使用一个函数将修改后的数据保存到文件中。在

新方法:

dataChanged信号QStandarItemModel发出时,连接的插槽writeChangedData)将把更改后的数据写入文件。换句话说,我将功能从setData移到了插槽中。在

代码:

class SettingsDialog(QDialog, settings_design.Ui_settingsDialog):
    def __init__(self):
        super(self.__class__, self).__init__()
        self.setupUi(self)
        self.weekdayTable = QTableView(self.weekdayPage)
        self.weekdayModel = self.loadMeetingData(self.meetingsData['weekdayList'])
        self.weekdayModel.dataChanged.connect(self.writeModifiedData)
        self.weekdayTable.setModel(self.weekdayModel)

    def writeModifiedData(self, topLeft, bottomRight):
        self.weekdayModel['weekdayList'][int(topLeft.row())][topLeft.column()] = value
        with open('meetings.config.json', 'w+') as f:
            f.write(json.dumps(self.weekdayModel))
            f.close()

相关问题 更多 >

    热门问题