关于TreeView的简单使用(Qt6.4.1)

news/2024/4/26 8:46:10/文章来源:https://blog.csdn.net/aggs1990/article/details/128103525

前言

TreeView是在Qt6.3中加入的,弥补了Qt中无官方树图。笔者上手尝试了下,虽然有点麻烦,但官方也做了不少简化。

本次教程,笔者创建一个简单的示例,以帮助读者使用TreeView。

一、创建模型类

当前模型需要使用C++定义,模型类继承自QAbstractItemModel,笔者的头文件如下

class TreeItem;class TreeModel : public QAbstractItemModel
{Q_OBJECTpublic:enum TreeRole {FullNameRole = Qt::DisplayRole,AddressRole = Qt::UserRole};Q_ENUM(TreeRole)explicit TreeModel(QObject *parent = nullptr);~TreeModel();// Header:QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;//    bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override;// Basic functionality:QModelIndex index(int row, int column,const QModelIndex &parent = QModelIndex()) const override;QModelIndex parent(const QModelIndex &index) const override;int rowCount(const QModelIndex &parent = QModelIndex()) const override;int columnCount(const QModelIndex &parent = QModelIndex()) const override;QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;QHash<int, QByteArray> roleNames() const override;// Editable:bool setData(const QModelIndex &index, const QVariant &value,int role = Qt::EditRole) override;Qt::ItemFlags flags(const QModelIndex& index) const override;private:void setupModelData(TreeItem *parent);TreeItem *getItem(const QModelIndex &index) const;TreeItem *rootItem;
};

与TableView的模型相关,多了index()和parent()的实现

模型类实现后,可以注册到qml中

qmlRegisterType<TreeModel>("TreeModelTest", 1, 0, "TreeModel");

二、显示模型数据

TreeView {id: treeView//模型model: TreeModel {}//委托delegate: TreeViewDelegate {}//边界操作boundsBehavior: Flickable.StopAtBounds//水平滚动条ScrollBar.horizontal: ScrollBar {}//垂直滚动条ScrollBar.vertical: ScrollBar {}
}

 树形视图的实现比较好理解,可以调整很多属性

TreeViewDelegate是Qt内置的委托,也可以自定义实现

注:

TreeView继承自TableView,所以TableView可以使用的东西,TreeView也可以使用。

三、添加水平表头

HorizontalHeaderView {id: tableView_topHeaderanchors.left: treeView.leftanchors.right: treeView.rightanchors.top: parent.topsyncView: treeView}

 若不指定水平表头的模型数据,默认会调用模型的headerData()函数获取,需要在C++中实现。

syncView属性可以将treeView的水平位置或列宽等信息,同步到水平表头,这样就不要再单独调用相关属性了。

注:

HorizontalHeaderView继承自TableView,所以TableView可以使用的东西,HorizontalHeaderView也可以使用。

四、添加垂直表头

VerticalHeaderView {id: tableView_leftHeaderanchors.left: parent.leftanchors.top: treeView.topanchors.bottom: treeView.bottomsyncView: treeViewmodel: treeView.rows}

若不指定水平表头的模型数据,默认会调用模型的headerData()函数获取,但要注意,headerData()只能返回最顶层的表头数据,导致显示异常。笔者建议直接绑定TreeView的行数或自定义。

syncView属性可以将treeView的垂直位置或列高等信息,同步到垂直表头,这样就不要再单独调用相关属性了。

注:

VerticalHeaderView继承自TableView,所以TableView可以使用的东西,VerticalHeaderView也可以使用。

五、增加选择功能

TreeView {id: treeView//模型model: TreeModel {}//选择模型selectionModel:  ItemSelectionModel{ id: itemSelectionModel}//委托delegate: TreeViewDelegate {}//边界操作boundsBehavior: Flickable.StopAtBounds//水平滚动条ScrollBar.horizontal: ScrollBar {}//垂直滚动条ScrollBar.vertical: ScrollBar {}
}

笔者测试了下Qt自带的选择模型,win10下效果还不错,但在android下的效果欠佳

  

六、读取模型数据

treeView.delegate: TreeViewDelegate {TapHandler {acceptedButtons: Qt.RightButtononTapped: {console.debug("currentIndex",row,column,index,treeView.modelIndex(column, row),model.display )}}}

 TreeView读取模型数据,和一般视图相同,但也有一些区别。和其他视图-模型不同,TreeView的row、column是视图中的显示的行与列(从0开始),index是视图中的列向叠加序列(自上而下,先计算第0列,再依次叠加后面几列)。模型中的行是相对于父对象的。也就是说,视图的row、column、index与模型中的不同,但存在对应关系。可以TreeView里的函数获取,如 columnAtIndex()、 modelIndex()、 rowAtIndex()等。

笔者使用的测试源码

后记

TreeView可以自定义表头,以实现复杂的表头设计。

时间所限,笔者只是显示了TreeView的简单用法,且仅在win10和android下简单测试。其中定有不足,请小伙伴指正。

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

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

相关文章

婚纱预订小程序开发,商家线上展示平台

婚纱代表着纯洁与忠贞&#xff0c;也是爱情永恒的见证者&#xff0c;穿上洁白的婚纱嫁给自己心爱的人是每个女生的梦想&#xff0c;婚纱对于每一个女生来说都有着重要的意义&#xff0c;所以选择一件美丽且适合的婚纱非常重要&#xff0c;因此人们在选择婚纱时会花费很多的时间…

Web3中文|区块链游戏的成长之痛

来源 | cointelegraph 编译 | DaliiNFTnews.com 在过去十年中&#xff0c;手机游戏已成为互动娱乐产业的重要支柱&#xff0c;得益于智能手机的普及&#xff0c;来自世界各地的用户都成为了硬核游戏玩家。 现在&#xff0c;区块链技术的出现正在推动一种范式的转变&#xff…

KNN最近邻算法分析及实现(Python实现)

KNN最近邻算法分析及实现&#xff08;代码附录后文&#xff09;1 KNN算法简介2 KNN基本原理3 简单实现KNN分析代码附录(Python)&#xff1a;呆&#xff0c;站住别跑&#xff0c;留个赞&#xff0c;给个关注嘛都看到这了Author&#xff1a; Nirvana Of Phoenixl Proverbs for yo…

计算机组成原理习题课第三章-1(唐朔飞)

计算机组成原理习题课第三章-1&#xff08;唐朔飞&#xff09; ✨欢迎关注&#x1f5b1;点赞&#x1f380;收藏⭐留言✒ &#x1f52e;本文由京与旧铺原创&#xff0c;csdn首发&#xff01; &#x1f618;系列专栏&#xff1a;java学习 &#x1f4bb;首发时间&#xff1a;&…

[附源码]SSM计算机毕业设计校园疫情防控管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

网络结点中心性 Centrality

结点中心性 node centrality 被认为是度量网络结点重要性的重要指标 常见的结点中心性有以下7种&#xff1a; &#xff08;以下各中心的概念在不同地方的定义可能不同&#xff0c;实际计算应查看使用工具的具体实现&#xff09; 1、度中心性 degree centrality 常被直接称为…

Spring Security权限管理原理

1.简介 授权是更具系统提前设置好的规则&#xff0c;给用户分配可以访问某一资源的权限&#xff0c;用户根据自己所具有的权限&#xff0c;去执行相应的操作&#xff0c;spring security提供的权限管理功能主要有两种&#xff1a; 基于过滤器的权限管理功能&#xff08;Filte…

Python学习笔记-数字类型

目录 1. 数字类型 1.1 整型 1.2 浮点数 1.3 复数 1.4 布尔类型 2. 常用内置数值计算函数库 3. 随机数函数 本文记录python中的基本数字类型信息&#xff0c;以及一些其他的相关知识点。 1. 数字类型 python中用于标识数字或者数值的数据类型&#xff0c;主要有如下分类…

盘点程序员的花式赚外快的骚操作

2022世界杯比赛难得如期开幕了&#xff0c;卡塔尔王子的表情包想必大家已经看到眼晕。 我拿2200亿和你玩&#xff0c;你踢一个0&#xff1a;2过不过分啊~ 现实中的投资可不比卡塔尔王子的表情包失落更多&#xff0c;毕竟投资有风险入行需谨慎。 然而悲惨的事实是&#xff0c;…

量表如何分析?

一、什么是量表 量表是一种测量工具&#xff0c;通常用来测量人们的主观态度、意见或价值观念。我们经常会在问卷中使用量表对调查对象进行测量&#xff0c;最常见到的就是李克特量表。 ‍1、定义&#xff1a;李克特量表 李克特量表是最常用的量表&#xff0c;是由美国社会心…

大数据平台功能

一 前言 计算机设备和信息数据的相互融合&#xff0c;对各个行业来说都是一次非常大的进步&#xff0c;已经渗入到工业、农业、商业、军事等领域&#xff0c;同时其大数据平台软件也得到一定发展。就目前来看&#xff0c;各类编程语言的发展、人工智能相关算法的应用、大数据时…

求树的直径算法以及证明

以下为两次dfs&#xff08;bfs&#xff09;的做法以及正确性证明。 算法步骤 &#xff08;1&#xff09;任取树上一点S&#xff0c;以S为源点BFS得S到各个顶点的d值&#xff1b; &#xff08;2&#xff09;取d值最大者之一为P&#xff0c;再以P为源点BFS得P到各个顶点的d值&am…

【计算机】可信平台模块Trusted Platform Module - TPM

简述 Brief Introduction TPM内部功能模块示意图&#xff1a; 引述 Trusted Platform Module Technology Overview (Windows) | Microsoft Learn&#xff1a; Trusted Platform Module (TPM) technology is designed to provide hardware-based, security-related functions.…

「区块链+数字身份」:DID 身份认证的新战场

美国经济学家布莱恩 • 阿瑟在其著作《技术的本质》中&#xff0c;写过这么一句话&#xff1a;「技术总是进行着这样一种循环&#xff0c;为解决老问题去采用新技术&#xff0c;新技术又引发新问题&#xff0c;新问题的解决又要诉诸更新的技术」。 区块链技术之所以能流行&…

在MacOS上实现两个网络调试助手的UDP通信测试

文章目录一、背景二、网络调试助手软件三、UDP通信过程一、背景 因为有一个项目要中会使用本机中两个应用程序之间的UDP通信。 因此本文记录一下怎么在MacOS上实现两个网络调试助手的UDP通信测试。 二、网络调试助手软件 我使用的网络调试助手软件是&#xff1a;网络调试助…

Redis实战——优惠券秒杀(超卖问题)

1 实现优惠券秒杀功能 下单时需要判断两点&#xff1a;1.秒杀是否开始或者结束2.库存是否充足 所以&#xff0c;我们的业务逻辑如下 1. 通过优惠券id获取优惠券信息 2.判断秒杀是否开始&#xff0c;如果未返回错误信息 3.判断秒杀是否结束&#xff0c;如果已经结束返回错误…

传奇登录器打不开的四种原因

最近很多传奇玩家或者GM都遇到了传奇登陆器打不开&#xff0c;没反应&#xff0c;提示无法访问指定设备等问题&#xff0c;导致很多游戏没有办法玩&#xff0c;让玩家心情沮丧&#xff0c;作为GM&#xff0c;那么就更伤心了&#xff0c;很多玩家进不来游戏&#xff0c;开服数千…

Maven笔记(2022-11-29)

一、Maven简述 1.1 什么是Maven&#xff1f; Apache Maven 是一款基于 Java 平台的项目管理和构建工具&#xff0c;它基于项目对象模型(POM)的概念&#xff0c;通过一小段描述信息来管理项目的构建、报告和文档。 简单来讲Maven就是一个构建工具&#xff0c;用来管理我们的项目…

GMM算法

高斯混合模型聚类(Gaussian Mixture Mode&#xff0c;GMM) 高斯混合模型是一种概率式的聚类方法&#xff0c;它假定所有的数据样本x由k个混合多元高斯分布组合成的混合分布生成。 其中高斯分布的概率密度函数如下&#xff1a; 现在的问题就是如何求α,μ,σ\alpha,\mu,\sigm…

Spring-全面详解(学习总结---从入门到深化)

目录 Spring简介 Spring体系结构 IOC_控制反转思想 IOC_自定义对象容器 IOC_Spring实现IOC IOC_Spring容器类型 ​ 容器实现类 IOC_对象的创建方式 使用构造方法 使用工厂类的方法…