QTreeView和QSqlQueryModel - 根据需要从sql数据库加载子项

时间:2011-05-23 17:32:51

标签: sql qt qt4 qtreeview qabstractitemmodel

我有以下问题。

我正在尝试为我的QTreeView实现一个模型,该模型将从sql表中动态加载数据。

表格如下:

CREATE TABLE xcmObjects
(
   id                       INT               AUTO_INCREMENT PRIMARY KEY NOT NULL,
   id_parent                INT               DEFAULT 0 NOT NULL ,
   title                    TEXT

);

id_parent包含父记录的id - 因此它们形成一个结构。

我希望我的模型仅在需要时从此表加载数据。换句话说,我不想将完整的结构加载到内存中,而是我不想只读取用户打开的那些节点的子节点。

QSqlQueryModel和QSqlTableModel似乎只适用于平面表。

我认为这个问题的一个解决方案是为每个开放节点(包括顶级隐形父节点)实现自定义QAbastractItemModel类和内部存储单独的QSqlQueryModel实例。然后重写每个方法并将请求转发给适当的模型。

也许有一些更简单的解决方案? : - )

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我认为通过QAbstractItemModel的子类来完成这项工作并不困难。您的顶级将是表中parent_id为0的所有项。将每个项的ID存储为QModelIndex类的内部数据,然后您可以使用传入各种函数的父索引来构造数据的新查询