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

一、前言

        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.rhkb.cn/news/159159.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pycharm中快速对比两个.py文件

在学习一个算法的时候,就想着自己再敲一遍代码,结果最后出现了一个莫名其妙的错误,想跟源文件对比一下到底是在哪除了错,之前我都是大致定位一个一个对比,想起来matlab可以快速查找出两个脚本文件(.m文件)的区别&#…

大语言模型迎来重大突破!找到解释神经网络行为方法

前不久,获得亚马逊40亿美元投资的ChatGPT主要竞争对手Anthropic在官网公布了一篇名为《朝向单义性:通过词典学习分解语言模型》的论文,公布了解释经网络行为的方法。 由于神经网络是基于海量数据训练而成,其开发的AI模型可以生成…

进化算法------代码示例

前言 遗传算法就是在一个解空间上,随机的给定一组解,这组解称为父亲种群,通过这组解的交叉,变异,构建出新的解,称为下一代种群,然后在目前已有的所有解中抽取表现好的解组成新的父亲种群&#…

2.MySQL表的操作

个人主页:Lei宝啊 愿所有美好如期而遇 表的操作 (1)表的创建 CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; 存储引擎的不同会导致创建表的文件不同。 换个引擎。 t…

“零代码”能源管理平台:智能管理能源数据

随着能源的快速增长,有效管理和监控能源数据变得越来越重要。为了帮助企业更好的管理能源以及降低能源成本,越来越多的能源管理平台出现在市面上。 “零代码”形式的能源管理平台,采用IT与OT深度融合为理念,可进行可视化、拖拽、…

css 如何让元素内部文本和外部文本 一块显示省略号

实际上还是有这样的需求的 <div class"container"><span>啊啊啊啊啊啊啊啊</span>你好啊撒撒啊撒撒撒撒啊撒撒撒撒撒说</div>还是有这样的需求的哦。 div.container {width: 200px;white-space: nowrap;text-overflow: ellipsis;overflow:…

LiveMedia视频中间件如何与第三方系统实现事件录像关联

一、平台简介 LiveMedia视频中间件是支持部署到本地服务器或者云服务器的纯软件服务&#xff0c;也提供服务器、GPU一体机全包服务&#xff0c;提供视频设备管理、无插件、跨平台的实时视频、历史回放、语音对讲、设备控制等基础功能&#xff0c;支持视频协议有海康、大华私有协…

ARMv5架构对齐访问异常问题

strh非对齐访问 在ARMv5架构中&#xff0c;对于strh指令&#xff08;Store Halfword&#xff09;&#xff0c;通常是要求对地址进行对齐访问的。ARMv5架构对于半字&#xff08;Halfword&#xff09;的存储操作有对齐要求&#xff0c;即地址必须是2的倍数。 如果尝试使用strh指…

具有标记和笔记功能的文件管理器TagSpaces

什么是 TagSpaces &#xff1f; TagSpaces 是一款免费、无供应商锁定的开源应用程序&#xff0c;用于借助标签组织、注释和管理本地文件。它具有高级笔记功能和待办事项应用程序的一些功能。该应用程序适用于 Windows、Linux、Mac OS 和 Android。并已经为 Firefox、Edge 和 Ch…

Qt Core篇 后端上位机界面开发

Qt Core篇 后端上位机界面开发 Qt Core 我选择了Qt,依旧度日如年&#xff0c;简单发布一篇&#xff0c;代表我还活着 Qt Core Qt Core是Qt框架的核心模块之一&#xff0c;它提供了一套跨平台的C类库&#xff0c;用于处理事件循环、线程、文件和目录操作、数据类型、日期和时间…

FPGA设计时序约束五、设置时钟不分析路径

一、背景 在进行时序分析时&#xff0c;工具默认对所有的时序路径进行分析&#xff0c;在实际的设计中&#xff0c;存在一些路径不属于逻辑功能的&#xff0c;或者不需要进行时序分析的路径&#xff0c;使用set_false_path对该路径进行约束&#xff0c;时序分析时工具将会直接忽…

数据库安全-RedisHadoopMysql未授权访问RCE

目录 数据库安全-&Redis&Hadoop&Mysql&未授权访问&RCE定义漏洞复现Mysql-CVE-2012-2122 漏洞Hadoop-配置不当未授权三重奏&RCE 漏洞 Redis-未授权访问-Webshell&任务&密匙&RCE 等漏洞定义&#xff1a;漏洞成因漏洞危害漏洞复现Redis-未授权…

ReLU激活函数

LeakyReLU激活函数的具体用法请查看此篇博客&#xff1a;LeakyReLU激活函数 ReLU&#xff08;Rectified Linear Unit&#xff09;激活函数是深度学习中最常用的激活函数之一&#xff0c;它的数学表达式如下&#xff1a; 在这里&#xff0c;(x) 是输入&#xff0c;(f(x)) 是输…

简述WPF中MVVM的设计思想

近年来&#xff0c;随着WPF在生产、制造、工控等领域应用越来越广泛&#xff0c;对WPF的开发需求也在逐渐增多&#xff0c;有很多人不断的从Web、WinForm开发转向了WPF开发。 WPF开发有很多新的概念及设计思想&#xff0c;如数据驱动、数据绑定、依赖属性、命令、控件模板、数…

多输入多输出 | MATLAB实现CNN-GRU-Attention卷积神经网络-门控循环单元结合SE注意力机制的多输入多输出预测

多输入多输出 | MATLAB实现CNN-GRU-Attention卷积神经网络-门控循环单元结合SE注意力机制的多输入多输出预测 目录 多输入多输出 | MATLAB实现CNN-GRU-Attention卷积神经网络-门控循环单元结合SE注意力机制的多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果…

虚拟机独立 IP 配置

虚拟机独立 IP 配置 1. 点击虚拟网络编辑器 2. 点击更改设置 3. 查看本地电脑网卡型号并设置虚拟网络编辑器桥接网卡为同型号网卡 4. 设置有限网络信息 5. 点击网络编辑按钮并点击身份 6. 编辑名称并选择MAC地址 7. 配置 IPv4 地址后点击应用即可

网络编程基础知识总结——IP,端口,协议

目录 1. 什么是网络编程&#xff1f; 2. 网络编程的三要素 3. IP 3.1 IP地址的概念 3.2 IP地址的分类 3.3 IPv4解析 3.4 Ipv6解析 4. IPv4 的使用细节 5. 特殊IP地址 4. 端口号 5. 协议 5.1 UDP协议 5.2 TCP协议 1. 什么是网络编程&#xff1f; 总的来说就是一句…

QDir实践

现在有多个文件&#xff0c;路径为&#xff1a; a\xxx\kmd_config\c.json 其中xxx是变量 startcalc,,,,,, 目标&#xff1a; 访问每一个json文件 实例&#xff1a; QString app_path QApplication::applicationDirPath() "/app";QDir dir(app_path);QStringLi…

简易LDO设计(包含原理图、PCB和实验)

一、前置知识 ①该电路是通过三极管&#xff08;BJT&#xff09;来实现的&#xff0c;所以需要知晓三极管的工作原理和特性。 ②三极管有三种状态&#xff1a;放大、饱和、截止。本文是利用三极管的放大状态来模拟LDO芯片的功能。 二、原理图 ①稳压二极管要想稳定到某个电压范…

Python点击exe后报错:Failed to execute script xxxx问题的解决办法

最近工作在弄人脸识别的问题&#xff0c;从gitee来pull了一个但是发现报了一个Failed to execute script XXX的问题 造成这个问题的原因是执行文件exe存放的目录不对&#xff0c;可能在打包前exe文件并不是存在在这个位置。 解决方案将exe文件尝试存在在不同目录下&#xff…