【Qt】QTreeView 和 QStandardItemModel的关系

QTreeViewQAbstractItemModel(通常是其子类,如 QStandardItemModel 或自定义模型)是 Qt 框架中的两个关键组件,它们之间存在密切的关系。

关系概述

  1. QTreeView

    • QTreeView 是一个用于显示和编辑层次数据的视图小部件。
    • 它提供了一种可视化方式来展示树状结构的数据,并支持基本的操作如展开/折叠节点、选择节点等。
  2. QAbstractItemModel (或其子类,例如 QStandardItemModel):

    • 模型是存储和管理数据的组件。它提供了数据访问的方法,包括获取项的数量、读取和写入数据等。
    • QAbstractItemModel 是一个抽象基类,通常使用它的具体子类(如 QStandardItemModel)来实现。

关联方式

QTreeView 和模型之间的关联是通过 setModel() 方法完成的。QTreeView 需要知道数据如何获取和更新,而模型提供这些信息。以下是一个简单的示例,说明如何将 QTreeViewQStandardItemModel 关联起来。

示例代码
cpp 复制代码
#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 和 QStandardItemModel
    QTreeView* 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();
}

详细解释

  1. 创建 QTreeView 和 QStandardItemModel

    • QTreeView 是一个用于展示层次数据的视图部件。
    • QStandardItemModel 是一种方便使用的基本模型,它基于 QStandardItem 来组织和存储数据。
  2. 设置模型数据

    • 使用 invisibleRootItem() 获取模型中的隐形根项,并通过这个根项添加子项来构建树状结构。
  3. 关联视图与模型

    • 调用 treeView->setModel(model) 方法,将模型与视图关联。这使得 QTreeView 可以访问和显示由模型管理的数据。
  4. 展示数据

    • QTreeView 添加到布局中,并设置主窗口的布局。
    • 显示主窗口并启动事件循环。

总结

  • QTreeView:负责可视化层次结构数据,提供用户交互(如展开/折叠、选择等)。
  • QAbstractItemModel(或其子类):管理实际的数据存储和访问逻辑。

通过将 QTreeView 与模型关联起来,可以轻松地在界面上展示复杂树状结构的数据。这种分离的架构使得数据管理和视图显示更加清晰和灵活。

相关推荐
娇娇yyyyyy43 分钟前
QT编程(15): Qt 按键事件和定时器事件
开发语言·qt
GIS阵地5 小时前
QgsDataSourceUri解析
数据库·c++·qt·开源软件·qgis
载数而行5206 小时前
Qt事件常用类,QLabel的QFrame交互
qt
娇娇yyyyyy8 小时前
QT编程(16): Qt Model
开发语言·qt
qq_466302459 小时前
vs2022 与Qt版本兼容 带来的警告
c++·qt
娇娇yyyyyy1 天前
QT编程(13): Qt 事件机制eventfilter
开发语言·qt
带娃的IT创业者1 天前
工具状态失踪之谜:EventBus事件漏接与asyncio.Lock并发陷阱双线诊断
qt·websocket·并发控制·eventbus·事件驱动架构·pwa·asyncio.lock
不想看见4041 天前
C++/Qt 代码规范指南
开发语言·qt
li星野1 天前
QT模拟题:QT项目实践与架构设计(120分钟)
开发语言·qt
笑鸿的学习笔记1 天前
qt-C++语法笔记之Qt中的delete ui、ui的本质与Q_OBJECT
c++·笔记·qt