多个表上的QSqlTableModel

时间:2016-08-04 18:38:51

标签: qt qtsql

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

TagObject
  - id
  - name
  - usable
  - information

tag_table
  - id
  - name
  - usable

tag_info_table
  - id_ref
  - info

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

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

我错过了什么吗?有没有办法用Qt的SQL类做到这一点?或者是如此指出here实现此子类QSqlQueryModel的唯一途径?

  

默认情况下,模型是只读的。要使其成为读写,必须将其子类化并重新实现setData()和flags()。另一个选择是使用QSqlTableModel,它提供基于单个数据库表的读写模型。

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

1 个答案:

答案 0 :(得分:2)

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

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