当前位置: 首页 > news >正文

使用QML的ListView自制树形结构图TreeView

背景

感觉QML自带的TreeView不是很好用,用在文件路径树形结构比较多,但是想用在自己数据里,就不太方便了,所以自己做一个。

用‘ListView里迭代ListView’的方法,制作树形结构,成果图:
在这里插入图片描述

代码

新建一个MyTreeView.qml用来写主要代码,再在main.qml中调用MyTreeView,并为它填充数据。
这里数据是在qml中用JSON.parse构建的json数据,也可以在cpp中用QJsonArray和QJsonObject来构建数据。

// MyTreeView.qml
import QtQuick 2.0Item {id: rootproperty alias model: list_view.modelListView {id: list_viewwidth: contentWidthanchors.fill: parentanchors.margins: 10delegate: list_delegate}Component {id: list_delegateItem{id: list_itemgroupwidth: leftLine.width + centre.width + rightLine.width + listView.widthheight: Math.max(centre.height, listView.height)property int lineY: leftLine.yRectangle {id: leftLinewidth: 20height: 1color: "#d3dee4"visible: modelData.id >= 0anchors.verticalCenter: centre.verticalCenter}Rectangle {id: centrewidth: 150height: 50color: "#d3dee4"radius: 5anchors.left: leftLine.rightanchors.verticalCenter: parent.verticalCenterText {text: qsTr(modelData.name)font.pixelSize: 20font.bold: trueanchors.centerIn: parent}}Rectangle {id: rightLinewidth: 20height: 1color: "#d3dee4"visible: modelData.subnodes.length > 0anchors.verticalCenter: centre.verticalCenteranchors.left: centre.right}Rectangle {id: verticalLinewidth: 1color: "#d3dee4"x: parent.width + 1visible: modelData.subnodes.length > 1anchors.top: parent.topanchors.bottom: parent.bottom}ListView {id: listViewdelegate: list_delegateheight: contentHeightwidth: contentWidthanchors.right: parent.rightmodel: modelData.subnodesspacing: 10onModelChanged: {}}Component.onCompleted: {listView.forceLayout()  // 要先确保listView加载子项完成// 画一下verticalLine的y坐标起点和终点for (var i = 0; i < modelData.subnodes.length; i++) {var item = listView.itemAtIndex(i)if (i === 0) {verticalLine.anchors.topMargin = item.lineY} else if (i === modelData.subnodes.length-1) {verticalLine.anchors.bottomMargin = item.lineY}}}}}
}
// main.qml
import QtQuick 2.15
import QtQml.Models 2.15
import QtQuick.Window 2.12
import QtQuick.Controls 1.4Window {id: window_width: 940height: 680visible: truetitle: qsTr("Hello World")color: "#103e6f"Item {id: homeanchors.fill: parentMyTreeView {id: treeViewanchors.fill: parent}}Component.onCompleted: {var data = JSON.parse('[{"id": -1,"name": "目录","subnodes": [{"id": 0,"name": "第一本书","subnodes": [{"id": 1,"name": "第一章","subnodes": [{"id": 2,"name": "第一节","subnodes": []}, {"id": 3,"name": "第二节","subnodes": []}]}, {"id": 4,"name": "第二章","subnodes": [{"id": 5,"name": "第一节","subnodes": []}, {"id": 6,"name": "第二节","subnodes": []}, {"id": 7,"name": "第三节","subnodes": []}]}]}, {"id": 8,"name": "第二本书","subnodes": [{"id": 9,"name": "第一章","subnodes": [{"id": 10,"name": "第一节","subnodes": []}, {"id": 11,"name": "第二节","subnodes": []}]}, {"id": 12,"name": "第二章","subnodes": [{"id": 13,"name": "第一节","subnodes": []}]}]}]}]')treeView.model = data}}

相关文章:

使用QML的ListView自制树形结构图TreeView

背景 感觉QML自带的TreeView不是很好用&#xff0c;用在文件路径树形结构比较多&#xff0c;但是想用在自己数据里&#xff0c;就不太方便了&#xff0c;所以自己做一个。 用‘ListView里迭代ListView’的方法&#xff0c;制作树形结构&#xff0c;成果图&#xff1a; 代码…...

2.MySQL面试题之索引

1. 为什么索引要用 B树来实现呢&#xff0c;而不是 B 树&#xff1f; MySQL 选择使用 B 树来实现索引&#xff0c;而不是 B 树&#xff0c;主要是基于以下几个原因&#xff1a; 1.1 数据存储和访问效率 B 树&#xff1a;在 B 树中&#xff0c;数据和索引都存储在每个节点中。…...

复制CodeIgniter新版的array_group_by辅助函数

很需要php数组的group_by功能&#xff0c;发现codeIgniter4.5新版中已有这个辅助函数&#xff0c;但我用的codeIgniter4.14没有&#xff0c;又不想升级php等一系列东西&#xff0c;就想把把codeIgniter4.5中array_group_by函数复制过来用。 先试着把新版本的array_helper文件及…...

合并两个 ES (Elasticsearch) 的数据

要将两个 Elasticsearch 实例中的同一个索引(/test_index)的数据合并到一个实例中,你可以按照以下步骤操作: 假设 Elasticsearch 1 (ES1) 和 Elasticsearch 2 (ES2) 都有相同的索引 /test_index。希望将 ES2 中的数据合并到 ES1 中。步骤 导出 ES2 的数据:使用 Elasticse…...

Linux网络协议.之 tcp,udp,socket网络编程(四).之网络转换函数htonl,ntohs等介绍

字节转换函数 把给定系统所采用的字节序称为主机字节序&#xff0c;为了避免不同类别主机之间在数据交换时由于对于字 节序的不同而导致的差错&#xff0c;引入了网络字节序。 主机字节序到网络字节序 u_long htonl(u_long hostlong); u_short htons(u_short short); 网络字节…...

LXC和udev知识点

1 POSIX pthread_create原理 1&#xff09;fork()、pthread_create()、vfork()对应的系统调用分别是sys_fork()、sys_clone()、sys_vfork()&#xff0c;它们在内核中都是通过do_fork()实现的。 2&#xff09;系统中所有的进程都组织在init_task.tasks链表下面&#xff0c;每个进…...

基于springboot+vue+uniapp的智慧校园管理系统小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…...

论文辅导 | 基于概率密度估计与时序Transformer网络的风功率日前区间预测

辅导文章 模型描述 本文所提出的时序优化Transformer 结构&#xff0c;该模型从结构上看由三部分组成&#xff1a;向量映射、编码器和解码器。编码器输入为数值天气预报数据以及相应的时间编码。解码器输入为预测日之前输出功率历史数据以及相应的时间编码。这些数据在经过向量…...

金蝶云星空单据体数量汇总-分组列信息

文章目录 金蝶云星空单据体数量汇总-分组列信息BOS配置效果展示 金蝶云星空单据体数量汇总-分组列信息 BOS配置 效果展示...

树状数组基础知识以及相关习题

文章目录 什么是树状数组&#xff1f;如何理解树状数组如何理解精髓lowbit二叉树和树状数组的结构树状数组的优点树状数组模板单点修改&#xff0c;区间查询区间修改&#xff0c;单点查询区间修改&#xff0c;区间查询树状数组法线段树法 树状数组基础练习题逆序对动态求连续区…...

2023大数据-架构师案例(八)

Lambda架构 nginx &#xff08;b&#xff09; Hbase &#xff08;c&#xff09;Spark Streaming &#xff08;d&#xff09;Spark &#xff08;e&#xff09;MapReduce &#xff08;f&#xff09;ETL &#xff08;g&#xff09;MemSQL &#xff08;h&#xff09;HDFS &#x…...

【Python】Python:探索未来科技的风向标

Python&#xff1a;探索未来科技的风向标 一、背景 近年来&#xff0c;随着人工智能、大数据、云计算等技术的飞速发展&#xff0c;Python 作为一门功能强大、简单易学的编程语言&#xff0c;逐渐成为了开发者的首选。在我国&#xff0c;Python 的热度持续攀升&#xff0c;不…...

Java语言程序设计——篇十一(6)

&#x1f33f;&#x1f33f;&#x1f33f;跟随博主脚步&#xff0c;从这里开始→博主主页&#x1f33f;&#x1f33f;&#x1f33f; 欢迎大家&#xff1a;这里是我的学习笔记、总结知识的地方&#xff0c;喜欢的话请三连&#xff0c;有问题可以私信&#x1f333;&#x1f333;&…...

2024年有哪些好用的文件加密软件?十款常用加密软件推荐

在2024年&#xff0c;随着数据泄露和网络威胁的日益复杂&#xff0c;文件加密软件成为了保护敏感信息不可或缺的工具。无论是个人用户还是企业&#xff0c;选择合适的加密软件都是确保数据安全的重要一环。 1. 安秉加密软件 安秉加密软件专为企业设计&#xff0c;提供全面的信…...

书生大模型学习笔记3 - 书生开源大模型链路体系

学习视频链接&#xff1a;书生浦语大模型全链路开源体系_哔哩哔哩_bilibili...

【竞技宝】奥运会:法国国奥淘汰埃及国奥晋级决赛

法国国奥在巴黎奥运会男足半决赛跟埃及国奥相遇&#xff0c;赛前大部分球迷和媒体&#xff0c;都一边倒看好法国国奥能轻松获胜。首先&#xff0c;法国国奥整体实力高出一个档次。最后&#xff0c;法国国奥坐拥主场作战的优势。所以&#xff0c;法国国奥正常发挥的话&#xff0…...

C++的STL简介(四)

目录 1.List 2.list 模拟实现 2.1基本框架 2.2 list_node 2.3 list 2.3.1 默认构造 2.3.2 析构函数 2.3.3 begin&#xff08;&#xff09; 2.3.4 end&#xff08;&#xff09; 2.3.5 size&#xff08;&#xff09; 2.3.6 empty&#xff08;&#xff09; 2.3.7 inser…...

NIO专题学习(一)

一、BIO/NIO/AIO介绍 1. 背景说明 在Java的软件设计开发中&#xff0c;通信架构是不可避免的。我们在进行不同系统或者不同进程之间的数据交互&#xff0c;或者在高并发的通信场景下都需要用到网络通信相关的技术。 对于一些经验丰富的程序员来说&#xff0c;Java早期的网络…...

Linux学习笔记:Linux基础知识汇总(个人复习版)

常用命令&#xff1a; 1、ls -a&#xff1a;显示所有文件&#xff08;包括隐藏文件&#xff09;&#xff0c;简洁版 -l&#xff1a;显示所有文件&#xff0c;详细版 -R&#xff1a;显示所有文件以及子目录下文件&#xff0c;简洁版 可以搭配使用。 2、netstat -i&#x…...

MSR020/MSR040低温漂、低功耗电压基准

MSR020/MSR040 是低温漂、低功耗、高精度 CMOS 电压基准&#xff0c; 具有 0.05% 初始精度和低功耗的特点。 该器件的低输出电压迟滞和低长期输出电压漂移的 特性&#xff0c;可以进一步提高稳定性和系统可靠性。 此外&#xff0c;器 件的小尺寸和低工作电流的特性使其非…...

【开发界人文十问】二、类的private私有,到底是对谁私有?为何修改器能随意修改?

文章目录一、先破误区&#xff1a;private 从来不是“安全加密”二、private 到底是“对谁私有”&#xff1f;它限制这些&#xff1a;它完全管不了这些&#xff1a;三、为什么修改器可以随便改私有变量&#xff1f;四、一张表看懂 private 的真实边界五、回到人文思考&#xff…...

weixin295基于ssm选课系统+ssm(文档+源码)_kaic

第5章 系统实现5.1管理员功能界面的实现管理员是系统里的最高权限&#xff0c;负责系统里的所有信息的管理、审核。包括学生信息、课程信息、选课信息等。5.1.1用户登录界面的实现本功能设计的目的是帮助系统检验身份&#xff0c;保证系统的安全。在用户登录功能界面里的元素包…...

ESP-12E外围电路设计与调试全攻略

1. ESP-12E外围电路设计基础 ESP-12E作为一款高性价比的Wi-Fi模块&#xff0c;其核心是ESP8266芯片。要让这个"大脑"正常工作&#xff0c;必须给它搭建合适的外围电路。这就像给电脑配电源、内存和硬盘一样&#xff0c;缺一不可。我刚开始玩ESP-12E时&#xff0c;就因…...

Makefile -GNU和MakeFile关系(二)

跟我一起写Makefile 一、 GNU 到底是什么&#xff1f;&#xff08;极简版&#xff09; GNU 一套开源、免费、自由的软件生态系统 全称&#xff1a;GNU’s Not Unix&#xff08;递归梗&#xff0c;意思“不是Unix&#xff0c;但像Unix”&#xff09; 你可以把它理解成&#x…...

大数据专业考CDA数据分析师证书值不值?适合哪些求职方向和岗位

大数据专业考取CDA数据分析师证书的价值分析CDA数据分析师证书的含金量CDA数据分析师证书由经管之家&#xff08;原人大经济论坛&#xff09;认证&#xff0c;是国内较早面向数据分析领域的专业认证。其课程体系覆盖统计学、机器学习、数据可视化等核心内容&#xff0c;适合大数…...

【大模型工程化生死线】:版本失控=线上崩盘?3步构建军工级回滚机制

第一章&#xff1a;大模型工程化版本管理与回滚机制 2026奇点智能技术大会(https://ml-summit.org) 大模型工程化中的版本管理远超传统软件的 Git commit 粒度&#xff0c;需同时追踪模型权重、Tokenizer 配置、训练超参、推理服务镜像及依赖环境快照。单一 SHA 哈希已无法承载…...

Electron 27 静默打印实战:从样式错乱到完美适配的完整避坑指南

Electron 27 静默打印实战&#xff1a;从样式错乱到完美适配的完整避坑指南 在桌面应用开发领域&#xff0c;Electron 凭借其跨平台特性和强大的 Web 技术集成能力&#xff0c;已成为构建商业级应用的首选框架。然而&#xff0c;随着 Electron 27 的发布&#xff0c;许多开发者…...

为什么92%的AI初创公司输在IP起点?——基于56个真实败诉案例的AI研发全生命周期权属漏洞图谱

第一章&#xff1a;AI原生软件研发知识产权保护策略的底层逻辑 2026奇点智能技术大会(https://ml-summit.org) AI原生软件的研发范式已从根本上重构知识产权&#xff08;IP&#xff09;的生成、归属与边界——模型权重、提示工程链、微调数据集、推理服务接口乃至训练日志&…...

Mac外接显示器必看:从排列到亮度调节的完整避坑指南

Mac外接显示器完全指南&#xff1a;从基础设置到高阶调校 开篇&#xff1a;为什么你的Mac需要外接显示器&#xff1f; 作为一名长期使用MacBook Pro的深度用户&#xff0c;我清楚地记得第一次连接外接显示器时的困惑与惊喜。那块13英寸的Retina屏幕虽然精致&#xff0c;但在处理…...

为什么你的AI模型API文档总比代码慢3.2个迭代?揭秘头部AIGC公司正在封测的文档-代码双向绑定协议(RFC-AIDoc v0.9草案首曝)

第一章&#xff1a;AI原生软件研发自动化文档更新机制 2026奇点智能技术大会(https://ml-summit.org) AI原生软件研发范式正推动文档生命周期从“人工维护”跃迁至“语义驱动的实时同步”。其核心在于将代码、测试、API契约与自然语言描述统一建模为可推理的知识图谱&#xff…...