多个表上的 QSqlTableModel

QSqlTableModel on multiple tables

我在数据库上使用 Qt 的 模型视图编程,其中一个对象使用多个 table 表示。假设以下对象和对应的数据库 tables 完全符合我的设计:

TagObject
  - id
  - name
  - usable
  - information

tag_table
  - id
  - name
  - usable

tag_info_table
  - id_ref
  - info

如您所见,信息 属性 被分隔成另一个 table 以防止存在 NULL 因为这个 属性 是可选的。

在数据库中,我有一个视图将值聚合为一个 'table',可以使用 QSqlTableModel 查询。请注意,INSERTing 数据无法通过这种方式实现。据我所知,Qt 的 类 不支持数据库设计,QSqlTableModelQSqlRelationalTableModel 都不支持。 (另外 QSqlQueryModel 根本不支持插入,所以这是不可能的。)

我错过了什么吗?有没有办法使用 Qt 的 SQL 类 来做到这一点?或者是实现此子类化的唯一方法 QSqlQueryModel 正如所指出的那样 here?

The model is read-only by default. To make it read-write, you must subclass it and reimplement setData() and flags(). Another option is to use QSqlTableModel, which provides a read-write model based on a single database table.


编辑: 至于子类化,我发现 this reference 是一个不错的切入点。

理想情况下,视图应该有适当的触发器来修改基础 tables。使视图 writable 并且您的问题消失:您可以直接在该视图上使用 QSqlTableModel 然后。

或者,您可以为每个 table 设置一个 QSqlTableModel,然后编写一个支持在源模型之间插入和转换并形成 writable 视图的自定义代理模型.这比编写 SQL 触发器要多。