如何将用户在QTableView上更改的数据提交到QSqlTableModel
我试图在修改 QTableView (如照片中所示)时检索用户的输入,然后更新 QSqlTableModel 以便修改我的数据库。
问题是 QTableView 没有像 QTableWidget 那样的信号,例如“itemChanged”或“currentItemChanged”,因此我很难捕获用户引入的值,因为我无法获取那个信号,它在QTableView中不存在?我如何识别那一刻?
我必须说,正如我所理解的,我已经设法使用信号“selectionChanged”使 QSqlTableModel 成为选择模型。但该信号只能为我提供焦点所在的 QModelIndex,并为我提供单元格的实际值,而不是用户在单击和编辑单元格后引入的值...
这是我的代码:
self.model = QSqlTableModel(db=db)
self.model.setEditStrategy(QSqlTableModel.OnFieldChange)
self.ui.projectSelector_tableView.setModel(self.model)
header = self.ui.projectSelector_tableView.horizontalHeader()
header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents)
self.model.setTable("tablefromdb")
self.model.select()
self.ui.projectSelector_tableView.selectionModel().selectionChanged.connect(self.selChanged)
self.projectSelectorWindow.show()
def selChanged(self, a, b):
self.currentindex = a.indexes()[0]
self.previousindex = b.indexes()[0]
def submitChanges(self):
self.model.setData(self.currentindex, self.value)
self.model.submitAll()
在一天结束时,我想获取用户输入的“self.value”,并将其设置为 QSqlTableModel,实际上我有 QModelIndex,但没有值。
希望大家能够帮助我,谢谢大家!
I'm trying to retrieve the input from the user when modifying the QTableView as seen in the photo and then updating the QSqlTableModel in order to get my database modified.
The problem is that QTableView has no signals as QTableWidget for example, "itemChanged", or "currentItemChanged", so it's difficult for me to capture the value that the user introduces, cause I can't get that signal, it doesn't exist in QTableView? How do I recognize that moment?
I must say I've managed to use the signal "selectionChanged" making QSqlTableModel a selectionModel, as I've understood. But that signal only gets me a QModelIndex where the focus is, and gets me the actual value of the cell, not the introduced by the user after clicking and editing the cell...
This is my code:
self.model = QSqlTableModel(db=db)
self.model.setEditStrategy(QSqlTableModel.OnFieldChange)
self.ui.projectSelector_tableView.setModel(self.model)
header = self.ui.projectSelector_tableView.horizontalHeader()
header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents)
self.model.setTable("tablefromdb")
self.model.select()
self.ui.projectSelector_tableView.selectionModel().selectionChanged.connect(self.selChanged)
self.projectSelectorWindow.show()
def selChanged(self, a, b):
self.currentindex = a.indexes()[0]
self.previousindex = b.indexes()[0]
def submitChanges(self):
self.model.setData(self.currentindex, self.value)
self.model.submitAll()
At the end of the day, I want to get the "self.value" that the user has typed in, and setData it to the QSqlTableModel, and I actually have the QModelIndex where it goes, but not the value.
I hope anyone can help me, thanks you all!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
模型有
dataChanged(topLeftIndex, BottomRightIndex)
信号,每次用户编辑任何内容时模型都会发出此信号,您可以从索引中获取值:topLeftIndex.data()
。Model has
dataChanged(topLeftIndex, bottomRightIndex)
signal, model emits this signal every time user edits anything, you can get value from index:topLeftIndex.data()
.