QTreeView 和 QAbstractItemModel(通常是其子类,如 QStandardItemModel 或自定义模型)是 Qt 框架中的两个关键组件,它们之间存在密切的关系。
关系概述
-  QTreeView: - QTreeView是一个用于显示和编辑层次数据的视图小部件。
- 它提供了一种可视化方式来展示树状结构的数据,并支持基本的操作如展开/折叠节点、选择节点等。
 
-  QAbstractItemModel(或其子类,例如 QStandardItemModel):- 模型是存储和管理数据的组件。它提供了数据访问的方法,包括获取项的数量、读取和写入数据等。
- QAbstractItemModel是一个抽象基类,通常使用它的具体子类(如- QStandardItemModel)来实现。
 
关联方式
QTreeView 和模型之间的关联是通过 setModel() 方法完成的。QTreeView 需要知道数据如何获取和更新,而模型提供这些信息。以下是一个简单的示例,说明如何将 QTreeView 与 QStandardItemModel 关联起来。
示例代码
#include <QApplication>
#include <QTreeView>
#include <QStandardItemModel>
#include <QVBoxLayout>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建主窗口和布局QWidget window;QVBoxLayout* layout = new QVBoxLayout(&window);// 创建 QTreeView 和 QStandardItemModelQTreeView* treeView = new QTreeView;QStandardItemModel* model = new QStandardItemModel;// 设置模型数据QStandardItem* rootItem = model->invisibleRootItem();// 添加一些示例项QStandardItem* item1 = new QStandardItem("Parent 1");rootItem->appendRow(item1);QStandardItem* child1_1 = new QStandardItem("Child 1-1");QStandardItem* child1_2 = new QStandardItem("Child 1-2");item1->appendRows({child1_1, child1_2});// 将模型与视图关联treeView->setModel(model);// 添加到布局并显示窗口layout->addWidget(treeView);window.setLayout(layout);window.show();return app.exec();
}
详细解释
-  创建 QTreeView 和 QStandardItemModel: - QTreeView是一个用于展示层次数据的视图部件。
- QStandardItemModel是一种方便使用的基本模型,它基于- QStandardItem来组织和存储数据。
 
-  设置模型数据: - 使用 invisibleRootItem()获取模型中的隐形根项,并通过这个根项添加子项来构建树状结构。
 
- 使用 
-  关联视图与模型: - 调用 treeView->setModel(model)方法,将模型与视图关联。这使得QTreeView可以访问和显示由模型管理的数据。
 
- 调用 
-  展示数据: - 将 QTreeView添加到布局中,并设置主窗口的布局。
- 显示主窗口并启动事件循环。
 
- 将 
总结
- QTreeView:负责可视化层次结构数据,提供用户交互(如展开/折叠、选择等)。
- QAbstractItemModel(或其子类):管理实际的数据存储和访问逻辑。
通过将 QTreeView 与模型关联起来,可以轻松地在界面上展示复杂树状结构的数据。这种分离的架构使得数据管理和视图显示更加清晰和灵活。