Qt之使用GraphicsView框架实现思维导图功能
一、简述
我们常见的思维导图类型XMind软件,功能十分强大,提供了各式各样的导图样式、形式,那我们可以用Qt实现思维导图的功能吗,答案肯定是可以的,用图说明。
1、静态方式
读取本地数据的方式进行展示。
2、优化
(1)增加选中效果
(2)优化连接线条
3、动态方式
(1)可自由添加/删除节点
(2)双击可重命名节点
(3)可折叠节点
(4)每层节点颜色可自定义
(5)支持xml格式数据的保存/读取(可拓展为其他格式或数据库)
更新
(1)增加圆角折现和圆滑曲线两种状态切换
(2)增加动态编辑和静态显示
(3)增加修改操作
线条绘制Code
void LineTest::paintEvent(QPaintEvent *event)
{QPoint startPoint = m_startPoint;QPoint endPoint = m_endPoint;int hSpace = 15;int radius = 8;QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);painter.setPen(QPen(Qt::gray, 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));// 判断是上弧线还是下弧线;if (endPoint.y() < startPoint.y()){// 绘制横线;painter.drawLine(startPoint, startPoint + QPoint(hSpace, 0));// 绘制竖线;startPoint += QPoint(hSpace, 0);QPoint vTopPoint = QPoint(startPoint.x(), endPoint.y() + radius);painter.drawLine(startPoint, vTopPoint);// 绘制上弧线;startPoint = vTopPoint;QPoint hTopPoint = QPoint(startPoint.x() + radius, endPoint.y());QPainterPath path(startPoint);// 绘制贝塞尔三次曲线;QPointF c1 = QPointF(startPoint.x(), hTopPoint.y());QPointF c2 = QPointF(startPoint.x() + 2, hTopPoint.y() + 2);path.cubicTo(c2, c2, hTopPoint);painter.drawPath(path);// 绘制横线;startPoint = hTopPoint;painter.drawLine(startPoint, endPoint);}else if (endPoint.y() > startPoint.y()){// 绘制横线;painter.drawLine(startPoint, startPoint + QPoint(hSpace, 0));// 绘制竖线;startPoint += QPoint(hSpace, 0);QPoint vBottomPoint = QPoint(startPoint.x(), endPoint.y() - radius);painter.drawLine(startPoint, vBottomPoint);// 绘制下弧线;startPoint = vBottomPoint;QPoint hBottomPoint = QPoint(startPoint.x() + radius, endPoint.y());QPainterPath path(startPoint);// 绘制贝塞尔三次曲线;QPointF c1 = QPointF(startPoint.x() + 2, hBottomPoint.y() - 2);QPointF c2 = QPointF(startPoint.x() + 2, hBottomPoint.y() + 2);path.cubicTo(c1, c1, hBottomPoint);painter.drawPath(path);// 绘制横线;startPoint = hBottomPoint;painter.drawLine(startPoint, endPoint);}else{// 绘制直线;painter.drawLine(startPoint, endPoint);}
}
尾
目前只实现了初步导图的基础功能,后续会增加更多的样式选择及拓展。
Qt之使用GraphicsView框架实现思维导图功能相关推荐
- Qt实现思维导图功能(三)
前文链接:Qt实现思维导图功能(二) 思维导图文件导入与导出 本文主要涉及文件拖拽窗口的实现和CRC32校验码的生成方法 百度网盘体验地址: 链接:https://pan.baidu.com/s/1Z ...
- 微信小程序框架分析思维导图
微信小程序框架分析思维导图
- Qt实现思维导图功能(二)
前文链接:Qt实现思维导图功能(一) 百度网盘体验地址: 链接:https://pan.baidu.com/s/1-be0tDJokpZeqhMEuHQntA 提取码:4d1w 注:UI窗体风格参考软 ...
- 微信小程序框架(思维导图)
这是小编整理的一份关于微信小程序框架的思维导图,建议大家电脑点击图片查看哦!
- 计算机网络——物理层知识框架以及思维导图
物理层 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体. 物理层主要任务:确定与传输媒体接口有关的一些特性(即定义标准) 一.导图总览 二.通信基础 1.一些重要概念 ...
- 计算机视觉学习知识框架(思维导图)非常详细
--neozng1@hnu.edu.cn 原图可戳:视觉组知识框架 | ProcessOn 建议右键点击图像在新标签页中打开方便放大查看
- Spring框架学习 思维导图
https://download.csdn.net/download/qq_38986946/10045116
- YARN框架学习思维导图
- 概率论与数理统计思维导图知识框架_考研概率论与数理统计 综合题型秘籍思维导图① 随机变量1~3章 [21考研上岸之旅]...
Hello World,我的朋友,这里是一颗小白蛋,大千世界,很高兴以这样的方式与你相遇 前言 在复习过程中发现概率论知识点很少且集中 所以没有分开章节去整理 王安式概率论辅导讲义+张宇概率论9讲+方 ...
最新文章
- python学习07
- 声卡硬件测试软件,RMAA声卡检测(RightMark Audio Analyzer)
- sqlite--代码操作
- Spring的PropertyPlaceholderConfigurer事例应用
- j2me程序发布到手机
- 对tableView三种计算动态行高方法的分析
- 【自用】 VS2017 部分快捷键
- Android开发之修改ImageView(图片)的颜色
- 怎样查看Jdk是32位还是64位
- 如何查看linux系统源码
- 在系统中用etcd实现服务注册和发现
- 第十届常州国际动漫艺术周
- php 快速找到php.ini位置
- ASP.NET MVC 使用 Datatables (1)
- “webservice远程测试显示 “测试窗体只能用于来自本地计算机
- 优化SQL的执行速度
- Django 创建超级用户
- Python 之 str 、 repr 、 反引号(``)的区别
- Julia: 如何一次性insert Array{Any,2} to SQLite DB?
- 网络摄像机如何安装拾音器?进行同步录音
热门文章
- Linux ls 命令学习和简单使用
- 利用Python求解八数码难题
- 毕业晚会主题八个字计算机学院,毕业主题标语8个字
- 移动硬盘里的linux系统文件夹加密,在Deepin系统中加密移动存储设备的方法
- 【17】C语言 | 函数递归题
- 龙讯|LT9721高性能HDMI/MIPItoTypeC TO DP转换器
- 使用120台相机进行3D拍照建模
- 基于python的水果销售系统设计与实现 django框架毕业设计毕设参考
- kubectl命令补全出错:kubectl ge-bash: _get_comp_words_by_ref: command not found
- 《组网技术》:路由器基本配置