【发布时间】:2018-05-15 16:05:56
【问题描述】:
我正在使用 QtableView 来显示和编辑来自 QsqlTableModel 的数据。 一切都很好:显示来自 postgreSQL 表的数据,用户可以对其进行编辑和保存修改。
我想在单击按钮时添加一行。我使用 QslTableModel 中的 insertRecord 方法。 该行已正确添加到 QTableView 中。
我的问题是: 我想在这个新行的第一个单元格中插入一个来自查询的值。 (自动填充唯一标识符)。
这是我的代码:
def ajoutlgn(self):
query_idNewLine = QtSql.QSqlQuery(self.db)
if query_idNewLine.exec_('SELECT sp_idsuivi+1 FROM bdsuivis.t_suivprev_tablo ORDER BY sp_idsuivi DESC LIMIT 1'):
while query_idNewLine.next():
identifiant = query_idNewLine.value(0)
#print identifiant
record = QtSql.QSqlRecord()
record.setValue(1,identifiant)
self.model.insertRecord(self.model.rowCount(), record)
该值未插入到新行中(但如果我手动输入一个值,它可以正常工作)。 尽管如此,查询还是可以的(正如我可以看到的 « print identifiant » 行,它返回预期的整数)。
你知道我做错了什么吗?
还有其他方法可以在 QTableView 单元格中以编程方式插入值吗?
或者我必须使用 QitemDelegate 吗?
感谢您的提前。
【问题讨论】:
-
使用 QSqlQueryModel:
model = QSqlQueryModel(),model.setQuery('SELECT sp....'),tv.setModel(model) -
感谢您的回答。这是我的第一次尝试。但是我无法使用这种类型的模型保存修改,并且有人告诉我这个模型在 Qt4 中存在错误。而且我无法使用 QT5。这就是我使用 QsqlTableModel 的原因。
-
谁告诉你他Qt4有错误,你试过了吗?我已经尝试过了,总的来说我没有问题。 Qt的很多类都有bug,就像任何库一样,即使这样我们也使用它,如果我们没有遇到那些bug就没有问题,直到现在我还没有遇到任何问题,你问QSqlQuery不要有错误吗? :P
-
已经记住了,QsqlQueryModel 是只读的,但是你可以做一个小的修改,让它也被写入,稍后我会发布一个响应,以便使用该模型写入数据库。跨度>
-
谢谢。我会试试这个模型。我与尝试失败的 QsqlRelationnalTableModel 混淆了。我期待着你的写作可能性的回答。 :-)
标签: c++ qt qtableview qsqlquery qsqltablemodel