Qt Model View TreeView及对应Model

2023-11-16

点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,可以点个在看,让它可以帮助到更多老铁~

一、概述

 

接着之前的话题继续!

 

如果把之前的QTableView改成QTreeView,我们在不改变Model的情况下可以直接得到一个没有结构层次的“树”;因为QAbstractTableModel不具有数据层次结构,如果我们想要实现有层次的数据结构,需要使用QStandardItemModel

该模型。为了显示一棵树,QStandardItemModel需要使用QStandardItem来进行填充。

 

下面梳理下几个类的关系:

 

QObject

   ||

QAbstractItemModel

       ||

QAbstractTableModel(Table层次结构)    QStandardItemModel(Tree层次结构)

 

如果以后构建自己的代码库时,各个模块划分的越详细则越方便复用。

 

二、程序举例

1. 使用QStandardItemModel构建Tree

以Qt自带的treeview来说明

//实例化model
standardModel = new QStandardItemModel ;
//QStandardItem  节点数据
QList<QStandardItem *> preparedRow =prepareRow("first", "second", "third");


// root 节点
QStandardItem *item = standardModel->invisibleRootItem(); 
//root 节点添加数据
item->appendRow(preparedRow);


//又一个QStandardItem  节点数据
QList<QStandardItem *> secondRow =prepareRow("111", "222", "333");
//在first节点上再添加一个数据
preparedRow.first()->appendRow(secondRow);
//view 设置model并全部展开
treeView->setModel(standardModel);
treeView->expandAll();
//添加数据节点的函数
QList<QStandardItem *> MainWindow::prepareRow(const QString &first,
                                                const QString &second,
                                                const QString &third)
{
    QList<QStandardItem *> rowItems;
    rowItems << new QStandardItem(first);
    rowItems << new QStandardItem(second);
    rowItems << new QStandardItem(third);


    return rowItems;
}

效果图如下:

2. 获得所选Item的内容以及层级

有了上面的基础,接下来进行扩展:

 

当treeView的Item被选中时,treeView 的selectionModel会发出selectionChanged的信号,将该信号与槽函数进行连接,在槽函数中我们可以通过index获得所选Item的内容;通过顶层节点没有parent的特点来计算所选Item的层级。

 

主要代码如下:

//信号函数 连接信号与槽
 QItemSelectionModel *selectionModel= treeView->selectionModel();


connect(selectionModel, SIGNAL(selectionChanged (const QItemSelection &, const QItemSelection &)),this, SLOT(selectionChangedSlot(const QItemSelection &, const QItemSelection &)));


//槽函数如下
void MainWindow::selectionChangedSlot(const QItemSelection & /*newSelection*/, const QItemSelection & /*oldSelection*/)
{
    //get the text of the selected item
    const QModelIndex index = treeView->selectionModel()->currentIndex();
    QString selectedText = index.data(Qt::DisplayRole).toString();
    //find out the hierarchy level of the selected item
    int hierarchyLevel=1;
    QModelIndex seekRoot = index;
    while(seekRoot.parent() != QModelIndex())
    {
        seekRoot = seekRoot.parent();
        hierarchyLevel++;
    }
    QString showString = QString("%1, Level %2").arg(selectedText)
                         .arg(hierarchyLevel);
    setWindowTitle(showString);
}

效果如下:

 

默认title

更改后的title及层级

三、小结

①Model/View中要想通过TreeView显示树型结构,需要在QStandardItemModel中组织树形数据结构

②通过index计算树形结构层级的方式

③通过index可以Item的内容

④使用**View时必须设置Model,因为Model中存储着数据结构

学不可以已

20200202 于 北京门头沟。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt Model View TreeView及对应Model 的相关文章

  • java入门六:java基础终章

    1 static关键字 静态变量和类一起加载 final修饰后的类无法被继承 2 抽象类 abstract修饰符可以用来修饰方法也可以修饰类 如果修饰方法 那么该方法就是抽象方法 如果修饰类 那么该类就是抽象类 抽象类中可以没有抽象方法 但
  • Linux Shell程序设计(2)

    实验十一 Shell程序设计 2 一 实验要求 综合运用shell编程知识进行设计性编程 二 实验内容和实验步骤 1 实验内容 假设你作为某工厂生产管理员 需要负责统计各车间每天生产的产品数据 你的计算机安装了双硬盘 为了保证数据安全 你在
  • 【定位问题】Mybatis-plus的selectPage()分页查询不生效问题

    背景 项目需要从mybits切换到mubits plus 但是我在进行分页查询的时候 发现一直不生效 问题原因 添加监听器 配置如下 Configuration MapperScan com baomidou mybatisplus sam
  • parted创建硬盘分区并创建LVM

    目的 将两个三T的硬盘做成LVM sdc sdd 一 parted将硬盘进行分区 1 parted的命令方式 Parted 命令分为两种模式 命令行模式和交互模式 1 命令行模式 parted option device command 该
  • 【原创】第一个iOS应用程序

    摘要 第一个iOS应用程序 包括获取控件 绑定事件 设置属性等内容 iOS Objective C 目录 第一章 窗口与应用程序 第二章 添加视图 2 1 从nib文件初始化视图 2 2 使用脚本添加视图 第三章 添加子视图 3 1 通过x
  • 制作自己的 Kindle 电子书

    想象以下场景 你刚收到一台新的 Kindle Paperwhite 心中已然响起了轰轰烈烈的 我今年 或这个冬天 一定要阅读 100 本书 结果发现 想看的书 Amazon 上找不到 或者排版很糟糕 如何解决 自己动手做呗 准备工作 我使用
  • UE4 UI实现改键功能

    主要内容 本文主要讲解如何在UI中实现自定义按键的功能类似于游戏中的改键操作 用到的是UE4自带的第三人称案例 因为第三人称自带了小白人和几个按键绑定就不用再手动去设置 实现步骤 1 创建两个UMG用来展示UI效果 1 创建WBP Key
  • C++链表合并

    有l1和l2两个链表 这两个链表降序排列 把l2合并到l1中 并按降序排列 同时清空l2链表 例如l1 9 8 7 6 l2 12 11 10 5 4 3 2 1 合并后l1 12 11 10 9 8 7 6 5 4 3 2 1 l2 in
  • 【Android】利用intent启动浏览器

    文章目录 一 默认浏览器 二 指定浏览器 三 选择浏览器 一 默认浏览器 需要设置Action和Date属性 构造 Uri uri Uri parse https www baidu com Intent intent new Intent
  • SCADE Suite 状态机之变量隐式赋值

    SCADE Suite 状态机之变量隐式赋值 1 变量的隐式赋值 目的 简化模型设计 Last 只要没有显示赋值 便取上一周期的数值 Default 只要没有显示赋值 便取默认设置的数值 优先级更高 设置方法 2 定义变量的Last值 1
  • LeetCode 817:链表组件(计数)

    解法一 常规解法 建图 DFS 时间复杂度O n O n 空间复杂度因为需要存储图 所以是O n 这种方法是通解 对于所有图都适用 Definition for singly linked list struct ListNode int
  • lua元表以及元方法

    知微出凡 lua元表以及元方法 lua中的变量是没有数据类型的 值有类型 类型有八种nil number boolean string function thread userdata以及table Lua 中的每个值都可以有一个 元表 这
  • 62.[GIS基础]笛卡尔坐标系

    文章目录 笛卡尔坐标系 多坐标系 坐标系的嵌套 坐标变换 坐标系转换 转载请注明原始链接 http blog csdn net a464057216 article details 54578069 后续此博客不再更新 欢迎大家搜索关注微信
  • 基于粒子群算法(PSO)优化径向基神经网络(PSO-RBF)的分类预测。matlab代码,优化参数为扩散速度,采用交叉验证。多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就

    清空环境变量 warning off 关闭报警信息 close all 关闭开启的图窗 clear 清空变量 clc 清空命令行 读取数据 res xlsread 数据集 xlsx 分析数据 num class length unique
  • 抛去容抗角度,从电容充放电角度理解RC低通滤波器

  • 和你一起从零开始写RISC-V处理器(2)

    RISC V加法指令的实现 文章目录 RISC V加法指令的实现 上期回顾 一 正片开始 编写各个模块 pc reg模块 if模块 rom模块 if id模块 id模块 regs模块 id ex模块 ex模块 二 顶层模块搭建 三 测试文件
  • 学懂最小生成树(克鲁斯卡尔算法)

    本节 小编将带大家了解最小生成树的第二种构成算法 克鲁斯卡尔算法 Kruskal algorithm 当然 对另一种算法感兴趣的朋友可以看看之前的这篇文章 学懂最小生成树 普里姆算法 目录 一 实现原理 二 代码实现 一 实现原理 克鲁斯卡
  • 后端开发——Flask框架从入门到入坟(中)

    前言 在上一篇文章中荔枝已经梳理了Flask的基础语法 但是想要靠这些东西来写一个项目是远远不够的噢 我们还需要一个更加清晰的项目逻辑来搭建一个Flask后端项目框架 在真实的项目开发中 我们还需要了解如何搭建数据库 如何管理高效管理代码
  • leetcode刷题——栈与队列

    队列 vs 栈 栈 从头进 从头出 只有头部一个进出口 队列 从尾进 从头处 头和尾分别负责出和进 适用于配对问题 20 有效的括号 运用栈尾进头出的思想实现配对 当我们遇到一个左括号时 我们会期望在后续的遍历中 有一个相同类型的右括号将其
  • js 判断数组是否有元素重复

    这里有一个js数组 判断数组是否有重复元素 具体代码 var vecotr for i 0 i

随机推荐

  • rdkafka线程过多_Kafka快速入门(十一)——RdKafka源码分析

    Kafka快速入门 十一 RdKafka源码分析 一 RdKafka C源码分析 1 Kafka OP队列 RdKafka将与Kafka Broke的交互 内部实现的操作都封装成Operator结构 然后放入OP处理队列里统一处理 Kafk
  • 计算机应用技术图像图形处理,计算机图像处理应用技术论文

    摘要 全息技术是物理学中的重大发现 近年来在各个行业得到广泛的应用 作为全息技术中的两个重要部分 CCD和计算机图像处理技术 在推动数字全息新一轮发展中起到至关重要的作用 本文将着重从计算机应用方面阐述图像处理技术在全息中的应用 关键词 计
  • 【机器学习经典算法】K近邻(KNN):核心与总结

    文章目录 1 初识K近邻 2 相知 2 1 K近邻三要素 2 2 KD树 2 2 1 kd树的构建 2 2 2 kd树的搜索 3 总结 1 初识K近邻 K 近邻 K Nearest Neighbors KNN 可以说是整个机器学习算法中最为
  • Python中的垃圾回收机制

    垃圾回收 Garbage Collection 以下简称GC 是一种自动的内存管理机制 有许多不同的实现算法 Python中的GC 以引用计数为主 标记 清除和分代回收为辅 1 GC 在程序中定义了一个变量 就是在内存中开辟了一段相应的空间
  • 硬件系统工程师宝典(1)-----硬件系统设计应该从哪里开始?

    系统设计举足轻重的一步 需求分析 今天我们开始读张志伟老师的 硬件系统工程师宝典 这是一本非常好的入门书 对需求分析 电源 信号完整性 电源完整性 可制造性 原理图 pcb的详细设计 常用软件等进行了介绍 可以帮助我们快速了解硬件工程师需要
  • Rancher2.0-2.4备份和恢复

    rancher2 0 2 4备份和恢复 说明 此文按照rancher官网实战操作 url https docs rancher cn docs rancher2 backups 2 0 2 4 single node backups ind
  • powershell 创建多个文件

    foreach file in Get ChildItem Echo file 1 5 foreach new Item Path E txt gt 创建多个文件 new item 新的内容单元 文本 可选 删除多个文件 只需要修改 new
  • Vue.js:Select--Option >下拉框绑定和取值

    遇到了这个解决了 所以记录一下 1 Vue js 2 https www iviewui com components select 完成vue js下拉框选择绑定与取值 实现效果图如下 template代码
  • 计算机进pe按键,台式机进入pe按什么键

    我的台式机想进入pe设置下系统 但不知按什么键进入 该怎么办呢 下面由学习啦小编给你做出详细的台式机进入pe按键说明 希望对你有帮助 台式机进入pe按键说明一 开机按F12 台式机 一体机 笔记本通用 其他品牌的有按F10的 F8的 F2的
  • 小程序支付-java

    https pay weixin qq com wiki doc api wxa wxa api php chapter 7 3 index 1 支付流程步骤 1 首先调用wx login方法获取code 通过code获取openid 2
  • js中defer和async的区别

    一般情况 按照惯例 所有script元素都应该放在页面的head元素中 这种做法的目的就是把所有外部文件 CSS文件和JavaScript文件 的引用都放在相同的地方 可是 在文档的head元素中包含所有JavaScript文件 意味着必须
  • 抖音很火的召唤神龙的小游戏完整代码-召唤神龙

    抖音很火的解压小游戏 完整代码分享 有兴趣的可以试着写一下 1 index
  • MongoDB和Elasticsearch的各使用场景对比

    MongoDB vs Elasticsearch MongoDB ElasticSearch 备注 定位 文档型 数据库 文档型 搜索引擎 一个管理数据 一个检索数据 资源占用 一般 高 mongo使用c es使用Java开发 写入延迟 低
  • 【Linux】常用的 Linux 命令行

    目录 写在前面 一 查看信息指令 1 df 查看磁盘驱动器的可用空间 2 free 显示可用内存 二 常用操作指令 1 pwd 查看当前目录 2 cd 改变目录 3 ls 列出目录内容 4 file 确定文件类型 5 切换 root 普通用
  • 【LeetCode与《代码随想录》】数组篇:做题笔记与总结-Java版

    代码随想录地址 是学习过程中的笔记 图来自代码随想录 文章目录 理论 题目 704 二分查找 35 搜索插入位置 34 在排序数组中查找元素的第一个和最后一个位置 69 x 的平方根 367 有效的完全平方数 理论 数组是存放在连续内存空间
  • Nginx---进程锁的实现

    http wang peng 1123 blog 163 com blog static 129821112201381311441180 在前面的源码分析中我们大致的介绍了一下nginx对负载均衡问题和惊群问题的解决方案 在本次源码分析中
  • 【C++】引用

    1 引用的基本语法 2 引用注意事项 int b 错误 int b a 正确 3 引用做函数参数 int temp a a b b temp 4 引用做函数返回值 出现问题 https www bilibili com video BV1e
  • 微信小程序水平居中,和垂直居中

    微信小程序水平居中 和垂直居中 1 WXML信息展示
  • Windows文本编辑器——推荐、介绍与安装(1)

    撰写时间 2023年4月11日 目的 介绍各种类型的文本编辑器 阐述编辑器的优缺点 并提供安装与使用方法 前言 文本编辑器是应用各种已有的编程语言进行软件开发的一种重要工具 它能够帮助开发者更加高效地编写代码 也能够帮助电脑小白快速上手各种
  • Qt Model View TreeView及对应Model

    点击上方蓝字可直接关注 方便下次阅读 如果对你有帮助 可以点个在看 让它可以帮助到更多老铁 一 概述 接着之前的话题继续 如果把之前的QTableView改成QTreeView 我们在不改变Model的情况下可以直接得到一个没有结构层次的