Qt应用开发(基础篇)——树结构视图 QTreeView

news2025/2/25 11:46:15

一、前言

        QTreeView类继承于QAbstractItemView类,提供了一个树结构视图的模型。

        视图基类 QAbstractItemView

        QTreeView默认为Model/View实现,下面是一个使用QFileSystemModelQTreeView的结合,显示系统文件结构的实例。

QFileSystemModel *model = new QFileSystemModel;
model->setRootPath(QDir::currentPath());
QTreeView *tree = new QTreeView(splitter);
tree->setModel(model);

        正常场景下,我们需要根据数据动态去生成树结构,这时候使用QStandardItemModel实现树结构的数据。

QStandardItemModel *model = new QStandardItemModel;
ui->treeView->setModel(model);
QStandardItem *item = new QStandardItem;
item->setText("000");
model->appendRow(item);
insterTreeNode("aaa",item);
insterTreeNode("bbb",item);
insterTreeNode("ccc",item);
insterTreeNode("ddd",item);
ui->treeView->expandAll();

void MainWindow::insterTreeNode(QString str,QStandardItem *parent)
{
    QStandardItem *item = new QStandardItem;
    item->setText(str);
    parent->appendRow(item);
}

        QTreeView树视图提供了一些公共属性和类方便程序员结构进行设计。使用expandAll()collapseAll()展开和折叠全部的节点,当发现折叠或者展开的时候,发出collapsed() expanded()信号。QTreeView带有标题头封装在QHeaderView中。

        QTreeView默认与一些按键绑定,使用户能够在视图中导航并与项的内容交互。

按键作用描述
上键Up将光标移动到前一行同一列中的项。如果当前项的父项没有更多的行可导航,则光标移动到父项前面的兄弟项的最后一行中的相关项。
下键Down将光标移动到下一行同一列中的项。如果当前项的父项没有更多的行可导航,则光标移动到其父项后面的兄弟项的第一行中的相关项。
左键Left通过折叠分支隐藏当前项的子项。
减号键Minus和Left一样
右键Right通过展开分支显示当前项的子项
加号键Plus和Right一样
星号键Asterisk展开当前项及其所有子项
上翻页PageUp将光标向上移动一页。
下翻页PageDown将光标向下移动一页。
主页Home将光标移动到模型中第一个顶级项的第一行同一列中的项。
尾页End将光标移动到模型中最后一个顶级项的最后一行同一列中的项。
F2在可编辑模型中,这将打开当前项进行编辑。Escape键可用于取消编辑过程并恢复对所显示数据的任何更改。

二、QTreeView

1、属性

1)allColumnsShowFocus

        该属性表示项是否应该使用所有列显示键盘焦点,默认值为false。

        如果此属性为真,则所有列将显示焦点,否则只有一列显示焦点。

bool allColumnsShowFocus() const
void setAllColumnsShowFocus(bool enable)
2)animated

        该属性表示是否启用动画,默认为False。

        如果此属性为true,树视图将动画展开和折叠分支。

        如果此属性为false,树视图将立即展开或折叠分支而不显示动画。

bool isAnimated() const
void setAnimated(bool enable)
3)expandsOnDoubleClick

        该属性表示是否双击展开节点,默认为true。

bool expandsOnDoubleClick() const
void setExpandsOnDoubleClick(bool enable)
4)headerHidden

        该属性表示是否隐藏头标题,默认为false。

bool isHeaderHidden() const
void setHeaderHidden(bool hide)
5)autoExpandDelay

        该属性表示在拖放操作期间打开或关闭树中的项之前的延迟时间(以毫秒为单位)。如果时间被设置为小于0,那么它将不会被激活。默认情况下,此属性的值为-1,意味着禁用自动扩展。

int autoExpandDelay() const
void setAutoExpandDelay(int delay)
6)indentation

        该属性表示树视图中每个级别的项目以像素为单位测量的缩进。对于顶级项目,缩进指定从视口边缘到第一列项目的水平距离,对于子项,它指定它们与父项之间的缩进。

        默认情况下,此属性的值与样式相关。因此,当样式更改时,此属性将从它更新。调用setIndentation()停止更新,调用resetIndentation()将恢复默认行为。

int indentation() const
void setIndentation(int i)
void resetIndentation()
7)itemsExpandable

        该属性表示项用户是否可以交互展开和折叠项,默认为true。

bool itemsExpandable() const
void setItemsExpandable(bool enable)
8)rootIsDecorated

        该属性表示是否显示展开和折叠顶级项的控件,默认为true。

        带有子项目的项目通常显示为展开和折叠它们的控件,从而允许显示或隐藏它们的子项目。如果此属性为false,则不会为顶级项显示这些控件。这可以使单个级别的树结构看起来像一个简单的项目列表。

bool rootIsDecorated() const
void setRootIsDecorated(bool show)
9)sortingEnabled

        该属性表示是否启用排序,默认为false。

bool isSortingEnabled() const
void setSortingEnabled(bool enable)

        在实例二代码中我们修改代码添加排序,展示的结果子项实现倒序排序。

QStandardItemModel *model = new QStandardItemModel;
ui->treeView->setModel(model);
QStandardItem *item = new QStandardItem;
item->setText("000");
model->appendRow(item);
insterTreeNode("aaa",item);
insterTreeNode("bbb",item);
insterTreeNode("ccc",item);
insterTreeNode("ddd",item);
ui->treeView->expandAll();
ui->treeView->setSortingEnabled(true);
ui->treeView->sortByColumn(0);

 

10)uniformRowHeights

        该属性表示是否让视图中的所有项目具有相同的高度,默认为false。只有在保证视图中的所有项具有相同高度时,才应该将此属性设置为true,这使视图能够进行一些优化。

bool uniformRowHeights() const
void setUniformRowHeights(bool uniform)
11)wordWrap

        该属性表示是否启用换行,默认为false。启用该属性,则文本将在需要的位置进行换行,如果不换行则需要设置textElideMode,它能够把超出范围的值显示为省略号。

bool wordWrap() const
void setWordWrap(bool on)

2、公共函数

1)columnAt

        返回给定x坐标所在的行序号。

int columnAt(int x) const
2)columnViewportPosition

        返回给定行号所在的视窗中的水平位置。

int columnViewportPosition(int column) const
3)columnWidth

        返回给定行号的宽度。

int columnWidth(int column) const
4)setColumnWidth

       设置给定行号的宽度。

void setColumnWidth(int column, int width)
5)header

       返回头标题信息,封装在QHeaderView中。

QHeaderView *header() const
6)indexAbove

        返回在给定模型上面的模型。

QModelIndex indexAbove(const QModelIndex &index) const
7)indexBelow

        返回在给定模型下面的模型。

QModelIndex indexBelow(const QModelIndex &index) const
8)isColumnHidden

        返回给定的列是否隐藏。

bool isColumnHidden(int column) const
9)isRowHidden

        返回给定的行是否隐藏。

bool isRowHidden(int row, const QModelIndex &parent) const
10)isFirstColumnSpanned

        如果父元素给定行的第一列中的项跨越所有列,则返回true;否则返回false。

bool isFirstColumnSpanned(int row, const QModelIndex &parent) const
11)setFirstColumnSpanned

        如果span为true,则具有给定父元素的行中第一列中的项被设置为跨所有列,否则显示该行上的所有项。

void setFirstColumnSpanned(int row, const QModelIndex &parent, bool span)
12)setTreePosition

        指定树结构应该放在逻辑索引索引处。如果设置为-1,则树将始终跟随视觉索引0。

void setTreePosition(int index)
13)treePosition

        返回设置树的逻辑索引。如果返回值为-1,则树被放置在可视索引0上。

int treePosition() const

3、公共槽函数

1)collapse

        折叠给定的节点。

void collapse(const QModelIndex &index)
2)collapseAll

        折叠全部的节点。

void collapseAll()
3)expand

        展开给定的节点。

void expand(const QModelIndex &index)
4)expandAll

        展开全部的节点。

void expandAll()
5)expandRecursively

        展开节点带深度,如果是-1则展开全部节点,如果是0则展开给定的索引。

void expandRecursively(const QModelIndex &index, int depth = -1)
6)expandToDepth

        展开节点带深度,如果是-1则展开全部节点,如果是0则展开给定的索引。

void expandToDepth(int depth)
7)hideColumn

        隐藏给定的列。

void hideColumn(int column)
8)resizeColumnToContents

        恢复列的宽度设置。

void resizeColumnToContents(int column)
9)showColumn

       显示给定的列。

void showColumn(int column)
10)sortByColumn

       升序或者降序进行排序。

void sortByColumn(int column, Qt::SortOrder order)

4、信号

1)collapsed

        有节点折叠的时候信号产生。

void collapsed(const QModelIndex &index)
2)expanded

        有节点展开的时候信号产生。

void expanded(const QModelIndex &index)

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

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

相关文章

深度学习基础知识 给模型的不同层 设置不同学习率

深度学习基础知识 给模型的不同层 设置不同学习率 1、使用预训练模型时,可能需要将2、学习率设置方式: 1、使用预训练模型时,可能需要将 (1)预训练好的 backbone 的 参数学习率设置为较小值, (2…

BI工具:让数据分析井然有序一望而知

BI(Business Intelligence)工具是一类专门用于数据分析和决策支持的软件工具。 它们能够将企业内部和外部的数据进行整合、处理和可视化,帮助用户从海量数据中获取有价值的见解和洞察,并以直观、易懂的方式展示给决策者和相关人员…

解决uniapp里scroll-view横向滚动的问题

一、前言 本以为是一件很简单的事,结果浪费了整整一个上午,并且问题并没有全部解决....后来没办法,用了touchmove模拟的滑动,如果有好的解决方法麻烦告诉我...非常感谢~ 一、问题 其实我想要实现的功能很简单,就是一…

Dubbo—Admin 整体架构与安装步骤

​回顾 Dubbo 服务治理体系的总体架构,Admin 是服务治理控制面中的一个核心组件,负责微服务集群的服务治理、可视化展示等。 Admin 部署架构 总体上来说,Admin 部署架构分为以下几个部分: Admin 主进程,包括服务发现…

表单规定输入域的选项列表(html5新元素)

datalist datalist 元素规定输入域的选项列表。 datalist属性规定 form 或 input 域应该拥有自动完成功能。当用户在自动完成域中开始输入时,浏览器应该在该域中显示填写的选项: 使用 input元素的列表属性与datalist元素绑定. 还有一定的搜索能力&…

c++视觉检测-----角点检测

角点检测:cornerHarris() cornerHarris()函数是OpenCV中用于执行Harris角点检测的函数。Harris角点检测是一种用于检测图像中角点的技术,通常用于特征检测和图像匹配。以下是cornerHarris()函数的用法: void cornerHarris(InputArray src, …

数据库基础篇一

MySQL数据模型 关系型数据库通过表来存储数据的数据库 SQL分类 数据库操作 进入数据库 mysql -u root -p #输入密码即可在cmd命令行窗口使用mysql 1.查询 2.创建 create database test; create database if not exists test; #如果test数据库不存在,则创建tes…

day27--AJAX(bootstrap之modal,toast;接口文档的一些用法;AJAX原理)

目录 Bootstrap之Modal: 显示和隐藏方法 通过自定义属性: 使用JS来控制弹框: Bootstrap之Toast: 接口文档一些用法: 删除图书: 图片上传: 图片上传步骤: 修改头像&#xf…

Kopler.gl笔记:可视化功能总览

1 添加数据 2 添加图层 打开“数据层”菜单,开始可视化。 层(Layers)简单来说就是可以相互叠加的数据可视化。 3 添加过滤器 在地图上添加过滤器以限制显示的数据。过滤器必须基于数据集中的列。要创建新的过滤器,打开“过滤器…

【OpenCV-PyQt5-PyGame-imutils】探索Python中的图像和视频捕获:性能分析与选择指南

前言 随着计算机视觉和多媒体应用的不断发展,图像和视频捕获变得越来越重要。在Python中,有多种库和工具可供选择,用于打开摄像头、捕获图像、以及处理视频流。本文旨在为读者提供对这些捕获方法的全面了解,并介绍如何计算平均帧…

堆专题2 向上调整构建大顶堆

题目: 样例: 输入 6 3 2 6 5 8 7 输出 8 6 7 2 5 3 思路: 向上调整,就是从叶子结点开始 往 根节点 往上面调整,操作与 向下调整 操作类似,只是不用判断左右孩子,由于我们是从叶子结点开始 往 …

mac电脑版数字图像处理软件:ACDSee Photo Studio 9最新 for Mac

ACDSee Photo Studio 9是一款由ACD Systems开发的功能强大的照片管理和编辑软件,专为Mac用户提供一站式解决方案,方便用户轻松浏览、管理和编辑照片。该软件提供了许多实用的工具和功能,包括高效的导入和排序工具、强大的编辑工具、智能组织和…

淘宝价格,淘宝商品优惠券数据接口,淘宝商品销量接口,淘宝商品详情数据接口,淘宝API接口

淘宝价格和商品优惠券数据接口是淘宝平台提供的官方数据接口,通过调用接口,可以获取到淘宝商品的价格信息和优惠券数据。 获取淘宝价格和商品优惠券数据接口的步骤如下: 输入淘宝网址登陆淘宝账号密码。点击获取key和secret。调用获取buyer…

JS DataTable中导出PDF右侧列被截断的问题解决

JS DataTable中导出PDF右侧列被截断的问题解决 文章目录 JS DataTable中导出PDF右侧列被截断的问题解决一. 问题二. 解决办法三. 代码四. 参考资料 一. 问题 二. 解决办法 设置PDF大小和版型 orientation: landscape, pageSize: LEGAL,上述代码设置打印的PDF尺寸为LEGAL&…

400电话申请办理:为企业提供高效沟通的必备工具

在当今竞争激烈的商业环境中,企业需要与客户保持紧密联系,提供高效沟通渠道。而400电话作为一种便捷的客服热线,成为越来越多企业的首选。本文将介绍400电话的申请办理过程,帮助企业了解如何获得这一重要的沟通工具。 首先&#…

Xcode升级到15.0 解决DT_TOOLCHAIN_DIR问题

根据个人开发遇到的问题做的总结,公司要求Xcode 14.2 ,Swift 5.7开发,由于升级了Mac 14.0系统后,Xcode 14.2不能使用,解决方案目前有2个 一、在原来Xcode 14.2 的显示包内容,如图 二、升级到Xcode的15.0后…

Android笔记(五):结合Compose组件利用ActivityResultLauncher解决多活动跳转返回数据

在本人博客中Android活动返回不在再支持startActivityForResult()后的处理方法已经记录采用ActivityResultLauncher来处理多活动的返回并传回数据的方式。但是采用的是布局xmlviewBinding技术。目前,谷歌官方推荐使用JetPack Compose组件来定义界面。在本文中&#…

DRESIS:全球首个综合耐药性数据库

耐药性已成为全球卫生保健的关键问题。目前已有的耐药相关数据库大都是针对某些疾病。本研究建立一个数据库DRESIS,全面描述具有耐药性的疾病和所有类型的耐药机制。公开访问网址:https://idrblab.org/dresis/ 01、ADTT:药物治疗靶点的变异; 02、IDUE:药…

cocos2d-x C++与Lua交互

Cocos版本: 3.10 Lua版本: 5.1.4 环境: window Visual Studio 2013 Lua Lua作为一种脚本语言, 它的运行需要有宿主的存在,通过Lua虚拟栈进行数据交互。 它的底层实现是C语言,C语言封装了很多的API接口&a…

【Jetpack Compose】BOM是什么?

前言 本篇旨在帮助小伙伴们了解和使用Compose中BOM相关的知识,在Compose的开发过程中更加便捷、统一的管理相关依赖信息。 BOM基础知识 Compose推出的BOM为物料清单的意思,BOM全称为Bill Of Materials,Compose推出BOM的意义旨在通过指定的…