我有以下问题。
我正在尝试为我的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实例。然后重写每个方法并将请求转发给适当的模型。
也许有一些更简单的解决方案? : - )
感谢您的帮助。
答案 0 :(得分:1)
我认为通过QAbstractItemModel的子类来完成这项工作并不困难。您的顶级将是表中parent_id为0的所有项。将每个项的ID存储为QModelIndex类的内部数据,然后您可以使用传入各种函数的父索引来构造数据的新查询