更改模型数据时,我无法更新QTableView的布局。 我尝试使用dataChanged.emit(index,index)和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
我做错了什么?
答案 0 :(得分:1)
我终于通过其他方法解决了这个问题。
旧方法(优雅的方法):
我使用函数扩展了QStandardModelItem
的{{1}} 方法,以将修改后的数据保存到文件中。
新方法:
当setData
连接的广告位(dataChanged
)发出QStandarItemModel
信号时,会将更改后的数据写入文件。换句话说,我将功能从writeChangedData
移到了广告位。
代码:
setData