【问题标题】:How to insert programmatically a value in a new row of a QtableView如何以编程方式在 QtableView 的新行中插入值
【发布时间】: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


【解决方案1】:

终于找到了解决办法:

这一行创建了一条记录,但不是我的 QsqlTableModel 的记录

    record = QtSql.QSqlRecord()

我把它换成了这个,效果很好:

    record = self.model.record()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 2012-05-31
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多