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

相关推荐
Chasing追~3 小时前
SQLite数据库从0到1
数据库·c++·qt·sqlite
行十万里人生6 小时前
Qt 对象树详解:从原理到运用
开发语言·数据库·qt·华为od·华为·华为云·harmonyos
南方的小清湖8 小时前
Qt之3D绘制曲线:QtDataVisualization实时绘制散点图
开发语言·qt
十五年专注C++开发9 小时前
QT 中的元对象系统(二):元对象实现原理QMetaObject
开发语言·c++·qt
_GR12 小时前
Qt开发⑧Qt的窗口_下_浮动窗口+对话框
开发语言·css·c++·qt·microsoft
御风@户外1 天前
qt5的中文乱码问题,QString、QStringLiteral 为 UTF-16 编码
c++·qt·乱码
东方忘忧1 天前
QT MD5校验文件和数据的完整性
开发语言·qt
Wyn_1 天前
【QT】QLinearGradient 线性渐变类简单使用教程
qt
暴躁茹1 天前
正则表达式用法及其示例:匹配、查找、替换文本中的模式,及QT下如何使用正则表达式。
qt·mysql·正则表达式
enyp802 天前
Qt QScrollArea 总结
开发语言·qt