如何将用户在QTableView上更改的数据提交到QSqlTableModel

发布于 2025-01-14 19:12:50 字数 1296 浏览 2 评论 0原文

我试图在修改 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.

photo

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

缱绻入梦 2025-01-21 19:12:50

模型有 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().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文