Qt扫盲-QTreeWidget理论总结

news2025/1/31 8:27:32

QTreeWidget理论总结

    • 1. 简述
    • 2. QTreeWidgetItem 简述
    • 3. 头标签
    • 4. 常用功能
    • 5. 槽函数
    • 6. 信号

1. 简述

QTreeWidget 类是Qt提供了一个标准的树部件,该部件具有经典的基于 Item 的界面,每个Item都是一个 QTreeWidgetItem。这个标准的树控件不需要model/view框架来轻松地创建简单的分层列表。如果是要使用更灵活的方法包括将 QTreeView 与 model/view 相结合。model/view 模型的话允许数据的存储与其表示分离。

在这里插入图片描述
从 这个Tree 来看,一个tree 可以设置 多列,每一个列其实就是展示的一些属性。一个Tree 可以有多行,每一行之间有一些关系,要么是并列,要么就是父子的关系,这样才能形成树的样子嘛。每个行其实就是一个 QTreeWidgetItem 。QTreeWidget 其实就是一个管理 QTreeWidgetItem 的容器而已。像内部的 每行具体的表现形式都是由QTreeWidgetItem 来确定的。同时会有一个 表头,也就是 上面的 名称-时间-大小 这行来管理每列的宽度和排序的一些功能样式展开之类的。

在最简单的形式中,QTreeWidget可以通过以下方式构造:

  QTreeWidget *treeWidget = new QTreeWidget();
  treeWidget->setColumnCount(1);
  QList<QTreeWidgetItem *> items;
  for (int i = 0; i < 10; ++i)
      items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("item: %1").arg(i))));
  treeWidget->insertTopLevelItems(0, items);

在将Item 添加到QTreeWidget之前,必须使用 setColumnCount() 设置列数。这样才能设置成功。正在使用的列数可以通过 columnCount() 函数找到。

2. QTreeWidgetItem 简述

QTreeWidgetItem 项用于保存QTreeWidgetItem 的信息行。行通常包含多列数据,每列数据可以包含文本标签和图标

QTreeWidgetItem 类是一个方便类,它取代了 Qt 3 中的 QListViewItem 类。它提供了一个用于 QTreeWidget 类的项。
项通常使用父项构造,该父项是 QTreeWidget(用于顶级项)或 QTreeWidgetItem(用于树较低级别的项)。

从 QTreeWidgetItem 的构造函数其实就是可以看出这个 每一个 Item 其实可以 以 QTreeWidgetItem 或者 QTreeWidget 作为父亲,把这个Item 依附在这个父亲上形成一个 树型结构。

QTreeWidgetItem(QTreeWidgetItem *parent, QTreeWidgetItem *preceding, int type = Type)
QTreeWidgetItem(QTreeWidgetItem *parent, const QStringList &strings, int type = Type)
QTreeWidgetItem(QTreeWidgetItem *parent, int type = Type)
QTreeWidgetItem(QTreeWidget *parent, QTreeWidgetItem *preceding, int type = Type)
QTreeWidgetItem(QTreeWidget *parent, const QStringList &strings, int type = Type)
QTreeWidgetItem(QTreeWidget *parent, int type = Type)

例如,下面的代码构造一个 顶级Top项 也是第一层直接是 QTreeWidget的子类项来表示世界上的城市,并将 Oslo 的条目添加为子项:

QTreeWidgetItem *cities = new QTreeWidgetItem(treeWidget);
cities->setText(0, tr("Cities"));

QTreeWidgetItem *osloItem = new QTreeWidgetItem(cities);
osloItem->setText(0, tr("Oslo"));
osloItem->setText(1, tr("Yes"));

可以通过指定构造Item 时所遵循的项来按特定顺序添加项:

QTreeWidgetItem *planets = new QTreeWidgetItem(treeWidget, cities);
      planets->setText(0, tr("Planets"));

还可以通过 addChild() addChildren()给这个QTreeWidgetItem 添加子Item,通过child() 来获取具体的 某一个 Item,在QTreeWidgetItem 其实管理了 添加子Item 的功能哈。

Item 中的每个列都可以有自己的背景Brush,该Brush是使用 setBackground() 函数设置的。当前的背景Brush可以使用 background() 找到。每列的文本标签可以使用自己的字体和Brush呈现。它们使用 setFont() 和 setForeground() 函数指定,并使用 font() 和 foreground() 读取。

顶级项与树中较低级别的项之间的主要区别在于,顶级项没有 parent() 。此信息可用于区分项,并且在树中插入和删除项时非常有用。可以使用 takeChild() 删除Item 的子项,并使用 insertChild() 函数插入子项列表中的给定索引处。

默认情况下,Item 是启用的、可选择的、可检查的,并且可以是拖放操作的来源。每个Item 的标志可以通过使用适当的值调用setFlags() 来更改(参见Qt::ItemFlags)。可以使用 setCheckState() 函数检查和取消选中可检查的Item 。相应的 checkState() 函数指示当前是否选中了该项。

3. 头标签

树可以有一个标题,其中包含小组件中每一列的部分。通过提供带有 setHeaderLabels() 的字符串列表来设置每个部分的标签是最最简单的,但是可以使用QTreeWidgetItemItem构造自定义标头,并使用setHeaderItem() 函数插入到树中。

QHeaderView *header() const 就是 QTreeWidget 获取这个头的功能,然后再通过QHeaderView 来设置表头的一些功能。

外观属性名含义
defaultAlignment就是 表头的 文字对齐方式
defaultSectionSize单元格的默认长
firstSectionMovable第一个 表头可以移动不
highlightSections是否高亮 显示 被选中的表头
maximumSectionSize单元格的默认长
minimumSectionSize单元格的默认长
showSortIndicator是否展示 排序的箭头
stretchLastSection就是把最后一个表头占满整个表格控件

4. 常用功能

  1. 树中的Item 可以根据预定义的排序顺序按列排序。如果启用了排序,则用户可以通过单击列标题对Item 进行排序。可以通过调用 setSortingEnabled() 来启用或禁用排序。isSortingEnabled() 函数指示是否启用排序。

  2. findItems() 来查找 Items

  3. columnCount() 等反映具体的这个 QTreeWidget 的列数

5. 槽函数

槽函数含义
clear()清除所有的 Item
collapseItem(const QTreeWidgetItem *item)就是把树状图全部收缩起来
expandItem(const QTreeWidgetItem *item)就是把树状全部展开
scrollToItem(const QTreeWidgetItem *item)滚动到某个 Item 的位置

6. 信号

信号含义
currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)Item选择改变的时候
itemActivated(QTreeWidgetItem *item, int column)就是单击双击、键盘快捷键被激活的时候
itemChanged(QTreeWidgetItem *item, int column)就是 文字、图标内容发生改变的时候被激活
itemClicked(QTreeWidgetItem *item, int column)item 被单击的时候
itemCollapsed(QTreeWidgetItem *item)item 收缩树的时候
itemDoubleClicked(QTreeWidgetItem *item, int column)item 被双击的时候
itemEntered(QTreeWidgetItem *item, int column)很少用
itemExpanded(QTreeWidgetItem *item)item 展开树的时候
itemPressed(QTreeWidgetItem *item, int column)item被按下
itemSelectionChanged()单、多Item选择改变的时候,一般搭配 selectedItems() 获取选择项 搭配使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/104788.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文科女进德国IBM实习做程序媛,我是怎么办到的?

很快我在IBM德国区实习的第一个月就要结束了。 作为一个土生土长的文科生&#xff08;硕士语言学、本科语言学商科&#xff09;&#xff0c;现在竟在欧洲混入跨国科技公司做编程技术类实习生&#xff0c;我自己也挺意外的。 尽管只是一点点微不足道的个人经历&#xff0c;此时…

教你如何优雅的转行Python程序员,一学就会

在实际的工作中&#xff0c;我们经常发现&#xff0c;很多朋友在某一个工作中做了一段时间&#xff0c;发现自己越做越没兴趣&#xff0c;越做越不开心&#xff0c;想跳不敢跳&#xff0c;想辞不敢辞&#xff0c;最后影响了自己的本职工作&#xff0c;陷入两难的窘境。 其实&am…

【Qbot】3.加入内容审核功能

该项目计划长期进行维护更新&#xff0c;欢迎star&#xff1a;https://github.com/zstar1003/Qbot 前言 在ChatGPT上线Q群不久&#xff0c;不少人对其进行了测试&#xff0c;但随着时间的延续&#xff0c;测试话题逐渐走向失控&#xff0c;迫使我不得不紧急暂停。 对同胞素质的…

【Python百日进阶-数据分析】Day134 - plotly饼图:go.pie()实例

文章目录4.2 go.Pie() 的基本饼图4.2.1 基本饼图4.2.2 样式饼图4.2.3 使用 uniformtext 控制文本字体大小4.2.4 控制饼图中的文本方向4.2.5 甜甜圈图4.2.6 从中心拉出扇区4.2.7 子图中的饼图4.2.8 自定义颜色集的子图4.2.9 绘制面积与总计数成比例的图表4.2.10 旭日图4.2.11 Da…

电脑软件、微信多开

因为办公需要在电脑上登录 2 个微信&#xff0c;但是直接双击微信图标只有 1 个登录界面&#xff0c;无法是现实登录 2 个微信。那么怎么才能在 1 个电脑上打开 2 个微信&#xff0c;方法有四种&#xff1a;1、安装&#xff1b;2、Enter&#xff1b;3、连续点击&#xff1b;4、…

『 canvas 特效』一文教你绘制绚丽的星空背景 TS + ES6

介绍 很久没有写关于 canvas 效果的文章了&#xff0c;刚好最近又学到了一个新的特效&#xff0c;使用 canvas 绘制多层次动态星空背景&#xff0c;今天就分享给大家。首先我们依旧来看一下最终实现的效果&#xff0c;如图所示&#xff1a; 由于录制 GIF 造成失帧&#xff0c;…

实战三十三:STAMP算法实现商品推荐实战 代码+数据

1.案例知识点 推荐系统任务描述:通过用户的历史行为(比如浏览记录、购买记录等等)准确的预测出用户未来的行为;好的推荐系统不仅如此,而且能够拓展用户的视野,帮助他们发现可能感兴趣的却不容易发现的item;同时将埋没在长尾中的好商品推荐给可能感兴趣的用户。STAMP推荐…

记录Win7系统下的node版本升级过程及后续项目启动所遇问题

目录 Windows7系统如何“安装”高版本Node 后续项目运行启动时遇到的问题 Bug &#xff1a; 背景 &#xff1a; 银行内网开发&#xff0c;接到一个新的项目开发&#xff0c;但前提因为开发所使用的云桌面更换了&#xff0c;由原来的Windows10系统降到了现在的Windows7系统&am…

【自媒体必备】AI文字转语音,支持多种人声选择,在线生成一键导出【电脑永久版】

AI文字转语音&#xff0c;支持多种人声选择&#xff0c;在线生成一键导出 软件是电脑版安装版本&#xff0c;大家根据自己安软件的习惯进行安装即可&#xff0c;安装后打开软件即可&#xff0c;且完全免费。语音选择方面就有晓晓、云扬、云希等等常用选择。点击后面的播放按钮…

腾讯大佬告诉你,写Python到底用什么IDE合适

不管你是 Python 新手还是老鸟&#xff0c;肯定纠结过一个问题&#xff1a; 到底用什么编辑器写 Python 代码好&#xff1f; 为此&#xff0c;我们调查了数十位鹅厂程序猿们爱用的 Python IDE&#xff0c;从他们对每款编辑器的看法中&#xff0c;也许能给你一点启示&#xff1…

我对程序员做副业有这几点建议

疫情这几年&#xff0c;“副业”的概念非常火。各大平台上都在说“副业赚钱”、“副业是刚需”等相关的内容、视频&#xff0c;有免费的&#xff0c;还有付费观看的。 其实在2020年疫情之前&#xff0c;大家对于“副业”并没有很关心。 从百度指数上可以明显看出&#xff0c;…

【笔记】Pade Approximations

1 pade approximations是什么&#xff1f; Pad Approximations是一种对pure delay使用常规传函进行近似替换的方法&#xff0c;matlab提供了的一个库函数pade。 在传递函数中&#xff0c;用e−τse^{-\tau s}e−τs表示纯延时pure delay环节&#xff0c;它对信号的幅值不会有任…

微服务框架 SpringCloud微服务架构 微服务面试篇 54 微服务篇 54.2 Nacos的服务注册表结构是怎样的? 54.2.1 多级存储模型

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 微服务面试篇 文章目录微服务框架微服务面试篇54 微服务篇54.2 Nacos的服务注册表结构是怎样的&#xff1f;54.2.1 多级存储模型54 微服务篇…

《Redis实战篇》四、分布式锁

文章目录4.1 基本原理和实现方式对比4.2 Redis分布式锁的实现核心思路4.3 实现分布式锁版本一4.4 Redis分布式锁误删情况说明4.5 解决Redis分布式锁误删问题4.6 分布式锁的原子性问题4.7 Lua脚本解决多条命令原子性问题4.8 利用Java代码调用Lua脚本改造分布式锁4.1 基本原理和实…

Oracle时间函数

Oracle 时间函数INTERVAL间隔一年间隔一天间隔一小时间隔一分钟NUMTODSINTERVAL间隔一天间隔一小时间隔一分钟MyBatis xml 中计算时间间隔需要处理的问题INTERVAL 函数整合到 MyBatis$ 符号拼接 sql 源码追踪NUMTODSINTERVAL 函数整合到 MyBatisOracle 时间间隔函数有INTERVAL、…

%25 express 中的中间件

1、express 中的中间件 &#xff08;1&#xff09;、当客户端的请求到达 express 服务器后&#xff0c;会连续调用多个中间件&#xff0c;对请求进行预处理 &#xff08;2&#xff09;、本质是一个 function 处理函数(与普通路由函数相比&#xff0c;形参中多了 next 参数&…

深入分析广告和电商结合的逻辑,针对性推出一套广告电商方案

大家好&#xff0c;我是林工&#xff0c;本期林工给大家深入分析广告和电商结合的逻辑&#xff0c;针对性推出一套广告电商方案。 对于消费者来说&#xff0c;广告要发挥引导、刺激并满足消费者需求的作用&#xff0c;首先要使广告传播的信息引人注意&#xff0c;激发消费者购…

掌握Qt构造系统

1. 前言 ​对于日常在Qt或者Visual Studio等**集成开发环境&#xff08;即IDE&#xff09;**中编码的开发者来说&#xff0c;构造系统通常是比较容易被忽略的部分。集成开发环境配置简单&#xff0c;界面友好&#xff0c;可以提高开发效率。 ​随着对开发环境的深度使用&…

2.0、Hibernate-级联关系

2.0、Hibernate-级联关系 级联关系 中 最为常见的就是 -> 1、一对多关系 &#xff1a;一个消费者可以购买多个商品 -> 生成多个订单; 消费者是1&#xff0c;订单是多 那么在数据库中&#xff0c;1 的一方是主表&#xff0c;多的一方是从表&#xff0c;通过主外键关系去维…

C# Winform 三层架构

一、介绍 三层架构是 C# 桌面开发中比较常用的框架&#xff0c;是由 表示层&#xff08;UI&#xff09;、业务逻辑层&#xff08;BLL&#xff09;和数据访问层&#xff08;DAL&#xff09;三层架构组成&#xff0c;目的是为了 “高内聚&#xff0c;低耦合”。开发人员分工更明…