0

我有以下问题。

我正在尝试为我的 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 实例。然后重写每个方法并将请求转发到适当的模型。

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

感谢帮助。

4

1 回答 1

1

我认为通过 QAbstractItemModel 的子类来做到这一点并不难。您的顶层将是表中 parent_id 为 0 的所有项目。将每个项目的 ID 存储为 QModelIndex 类的内部数据,然后您可以使用传递给各种函数的父索引来构造新的数据查询.

于 2011-05-24T14:32:25.477 回答