一、简述

我们常见的思维导图类型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框架实现思维导图功能相关推荐

  1. Qt实现思维导图功能(三)

    前文链接:Qt实现思维导图功能(二) 思维导图文件导入与导出 本文主要涉及文件拖拽窗口的实现和CRC32校验码的生成方法 百度网盘体验地址: 链接:https://pan.baidu.com/s/1Z ...

  2. 微信小程序框架分析思维导图

    微信小程序框架分析思维导图

  3. Qt实现思维导图功能(二)

    前文链接:Qt实现思维导图功能(一) 百度网盘体验地址: 链接:https://pan.baidu.com/s/1-be0tDJokpZeqhMEuHQntA 提取码:4d1w 注:UI窗体风格参考软 ...

  4. 微信小程序框架(思维导图)

    这是小编整理的一份关于微信小程序框架的思维导图,建议大家电脑点击图片查看哦!  

  5. 计算机网络——物理层知识框架以及思维导图

    物理层 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体. 物理层主要任务:确定与传输媒体接口有关的一些特性(即定义标准) 一.导图总览 二.通信基础 1.一些重要概念 ...

  6. 计算机视觉学习知识框架(思维导图)非常详细

    --neozng1@hnu.edu.cn 原图可戳:视觉组知识框架 | ProcessOn 建议右键点击图像在新标签页中打开方便放大查看

  7. Spring框架学习 思维导图

    https://download.csdn.net/download/qq_38986946/10045116

  8. YARN框架学习思维导图

  9. 概率论与数理统计思维导图知识框架_考研概率论与数理统计 综合题型秘籍思维导图① 随机变量1~3章 [21考研上岸之旅]...

    Hello World,我的朋友,这里是一颗小白蛋,大千世界,很高兴以这样的方式与你相遇 前言 在复习过程中发现概率论知识点很少且集中 所以没有分开章节去整理 王安式概率论辅导讲义+张宇概率论9讲+方 ...

最新文章

  1. python学习07
  2. 声卡硬件测试软件,RMAA声卡检测(RightMark Audio Analyzer)
  3. sqlite--代码操作
  4. Spring的PropertyPlaceholderConfigurer事例应用
  5. j2me程序发布到手机
  6. 对tableView三种计算动态行高方法的分析
  7. 【自用】 VS2017 部分快捷键
  8. Android开发之修改ImageView(图片)的颜色
  9. 怎样查看Jdk是32位还是64位
  10. 如何查看linux系统源码
  11. 在系统中用etcd实现服务注册和发现
  12. 第十届常州国际动漫艺术周
  13. php 快速找到php.ini位置
  14. ASP.NET MVC 使用 Datatables (1)
  15. “webservice远程测试显示 “测试窗体只能用于来自本地计算机
  16. 优化SQL的执行速度
  17. Django 创建超级用户
  18. Python 之 str 、 repr 、 反引号(``)的区别
  19. Julia: 如何一次性insert Array{Any,2} to SQLite DB?
  20. 网络摄像机如何安装拾音器?进行同步录音

热门文章

  1. Linux ls 命令学习和简单使用
  2. 利用Python求解八数码难题
  3. 毕业晚会主题八个字计算机学院,毕业主题标语8个字
  4. 移动硬盘里的linux系统文件夹加密,在Deepin系统中加密移动存储设备的方法
  5. 【17】C语言 | 函数递归题
  6. 龙讯|LT9721高性能HDMI/MIPItoTypeC TO DP转换器
  7. 使用120台相机进行3D拍照建模
  8. 基于python的水果销售系统设计与实现 django框架毕业设计毕设参考
  9. kubectl命令补全出错:kubectl ge-bash: _get_comp_words_by_ref: command not found
  10. 《组网技术》:路由器基本配置