【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 与模型关联起来,可以轻松地在界面上展示复杂树状结构的数据。这种分离的架构使得数据管理和视图显示更加清晰和灵活。

相关推荐
看到我,请让我去学习1 小时前
Qt编程-qml操作(js,c++,canvas)
开发语言·qt
哈市雪花3 小时前
相机:Camera原理讲解(使用OpenGL+QT开发三维CAD)
qt·3d·交互·相机·图形学·opengl·视角
津津有味道5 小时前
Qt C++串口SerialPort通讯发送指令读写NFC M1卡
linux·c++·qt·串口通信·serial·m1·nfc
feiyangqingyun7 小时前
全网唯一/Qt结合ffmpeg实现手机端采集摄像头推流到rtsp或rtmp/可切换前置后置摄像头/指定分辨率帧率
qt·智能手机·ffmpeg
随意0237 小时前
Qt 事件
开发语言·qt
鸥梨菌Honevid7 小时前
Qt自定义控件(1)——QPaintEvent
开发语言·qt
Mr_Xuhhh1 天前
网络基础(1)
c语言·开发语言·网络·c++·qt·算法
feiyangqingyun1 天前
Qt音视频开发技巧/推流带旋转角度/rtsprtmp推流/保存文件到MP4/拉流解析旋转角度
qt·音视频·qt旋转角度推流
清醒的兰1 天前
Qt 基于TCP套接字编程
网络·qt·tcp
mahuifa11 天前
PySide环境配置及工具使用
python·qt·环境配置·开发经验·pyside