QTreeView和QSqlQueryModel——根据需要从sql数据库加载子级



我有以下问题。

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

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

谢谢你的帮助。

我认为通过QAbstractItemModel的子类来实现这一点不会太困难。您的最高级别是表中parent_id为0的所有项。将每个项的ID存储为QModelIndex类的内部数据,然后可以使用传递给各种函数的父索引来构造数据的新查询。

相关内容

  • 没有找到相关文章

最新更新