【问题标题】:SQLite view as an argument for QSqlTableModel::setTable()SQLite 视图作为 QSqlTableModel::setTable() 的参数
【发布时间】:2014-06-03 13:44:29
【问题描述】:

我希望我的QTableView 连接到QSqlTableModel,以动态更新自身。我将提供给我的QSqlTableModel 的 SQLite 视图将由许多带有LEFT OUTER JOIN 的 SQLite 表创建。这个想法是使这些组成 SQLite 表中的任何更改自动通过 SQLite 视图和QSqlTableModel 传播到QTableView

  • 可以将 SQLite 视图传递给 QSqlTableModel::setTable() 吗?
  • QSqlTableModelQTableView 会立即反映 SQLite 视图中的更改吗?
  • 有没有更好的方法来实现目标?

【问题讨论】:

    标签: qt sqlite model-view


    【解决方案1】:

    如果底层表从其他地方发生变化,QSqlTableModel 不会自行更新(至少这确实适用于 MySql,我很确定 QSqlTableModel 是被动的)。

    【讨论】:

    • 好吧,你的意思是我唯一想念的就是在底层表发生变化时调用 QSqlTableModel::select() 吗?其余的都可以按照我上面的描述工作吗?
    • 如果我理解正确(将 SqlLite 视图添加到 QSqlTableModel,将模型设置为 tableView).. 那么是的。但是您将无法通过模型/视图更改数据,因为 SQLite 视图是只读的 AFAIK。
    • 如果我错了,请纠正我,但即使我使用 SQLite 表而不是 SQLite 视图并删除 QSqlTableModel 中的一行,它也不会更改源表。如果是这样,那不如换个源,让整个链自己更新,不是吗?
    • QSqlTableModel 可以用于更改数据库字段。只需阅读文档。也可以删除一行。在源表中如何以及何时完成取决于提交模式。你是怎么做的删除取决于应用场景。对于我的需求(或客户需求),我通常使用修改后的 QSqlQueryModel 并自己处理源数据的更改。但我几乎没有一个典型的“表应用程序”——所以在我的典型用例中,直接使用 QSqlQueries 通常会更好。
    【解决方案2】:

    有没有更好的方法来实现目标?

    到目前为止,我得出的结论是,在这种情况下最好使用

    • 一个 SQLite 表而不是一个 SQLite 视图,因为它为 Q...TableModel 提供了更快的查找,
    • QAbstractTableModel 的子类而不是 QSqlTableModel,这样我就可以先更新源 SQLite 表,然后是 QAbstractTableModel::beginResetModel() ,重建连接的 SQLite 表,最后 QAbstractTableModel::endResetModel()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 2013-09-28
      相关资源
      最近更新 更多