我有以下问题。
我正在尝试为我的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类的内部数据,然后可以使用传递给各种函数的父索引来构造数据的新查询。