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

相关推荐
码农客栈19 分钟前
qt QWebSocketServer详解
qt
plmm烟酒僧2 小时前
Windows下QT调用MinGW编译的OpenCV
开发语言·windows·qt·opencv
Black_Friend2 小时前
关于在VS中使用Qt不同版本报错的问题
开发语言·qt
冷凝女子3 小时前
【QT】海康视频及openCv抓拍正脸接口
qt·opencv·音视频·海康
苏三有春5 小时前
PyQt5实战——UTF-8编码器功能的实现(六)
开发语言·qt
Vanranrr6 小时前
C++ QT
java·c++·qt
兆。6 小时前
掌握 PyQt5:从零开始的桌面应用开发
开发语言·爬虫·python·qt
徒步僧17 小时前
ThingsBoard规则链节点:RPC Call Reply节点详解
qt·microsoft·rpc
可峰科技18 小时前
斗破QT编程入门系列之一:认识Qt:初步使用(四星斗师)
开发语言·qt