Qt实现思维导图功能(五)

前文链接:Qt实现思维导图功能(四)
思维导图纵向分布模式:模式一

百度网盘体验地址:
链接:https://pan.baidu.com/s/1YNSBiFOUwnSSKvHsBvOT3g 
提取码:ifyc

动态演示效果


静态展示图片
在这里插入图片描述

前文BUG维护

序号问题
1修复侧滑菜单栏首次收缩卡顿问题
2修复侧滑功能窗口未能置顶问题
3修复侧滑功能窗口状态未与思维导图状态统一问题
4优化侧滑功能窗口图片,由svg格式文件转换
5升级侧滑功能窗口,增加功能标题和功能备注,增加鼠标进出动态效果

新增功能如下

序号简述具体功能
1布局转换思维导图横向模式与纵向模式间任意切换

新升级的侧滑窗口鼠标进出动效代码

#pragma once/** 思维导图-侧滑窗体-阴影图画按钮* 按钮文本:标题|说明(文本用“|”分割)*/#include <QPushButton>
#include <QPaintEvent>class QPropertyAnimation;class ShadowButton : public QPushButton
{Q_OBJECTQ_PROPERTY(int offsetY READ offsetY WRITE setOffsetY)public:ShadowButton(QWidget *parent = nullptr);~ShadowButton();// 设置图片void setPixmap(const QPixmap &pixmap);protected:void paintEvent(QPaintEvent *event);void enterEvent(QEvent *event);void leaveEvent(QEvent *event);private:void setOffsetY(int offsetY);int offsetY();private:qreal m_opacity;		// 透明度QColor m_coverColor;	// 遮罩颜色QPixmap m_pixmap;		// 图片int m_coverHieght;		// 遮罩高度int m_offsetY;			// 遮罩偏移QPropertyAnimation *m_animation;
};
#include "ShadowButton.h"
#include <QPainter>
#include <QPropertyAnimation>ShadowButton::ShadowButton(QWidget *parent /*= nullptr*/)
{m_opacity = 0.75;m_coverColor = QColor(0, 0, 0);m_coverHieght = 100;m_offsetY = m_coverHieght / 2;setCheckable(true);m_animation = new QPropertyAnimation(this, "offsetY", this);m_animation->setEasingCurve(QEasingCurve::Linear);m_animation->setDuration(300);
}ShadowButton::~ShadowButton()
{}void ShadowButton::setPixmap(const QPixmap &pixmap)
{m_pixmap = pixmap;
}void ShadowButton::paintEvent(QPaintEvent *event)
{Q_UNUSED(event)QPainter painter(this);painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);// 设置剪切路径QPainterPath path;int radius = 10;path.addRoundedRect(rect(), radius, radius);painter.setClipPath(path);// 绘制图片painter.drawPixmap(rect(), m_pixmap);// 绘制遮罩painter.setPen(Qt::NoPen);painter.setBrush(m_coverColor);painter.setOpacity(m_opacity);QPainterPath coverPath1;coverPath1.addRect(rect());QPainterPath coverPath2;coverPath2.addRect(rect().adjusted(0, height() - m_offsetY, 0, 0));QPainterPath coverPath = coverPath1.intersected(coverPath2);painter.drawPath(coverPath);// 绘制标题painter.setPen(Qt::white);QStringList texts = text().split("|");if (2 == texts.size())painter.drawText(QRect(0, height() - m_offsetY + m_coverHieght / 2, width(), m_coverHieght / 2), Qt::AlignCenter, texts.at(1));if (1 <= texts.size()){if (isChecked())painter.setPen(QPen(QColor(119, 169, 253)));QFont font = painter.font();font.setPixelSize(20);painter.setFont(font);painter.drawText(QRect(0, height() - m_offsetY, width(), m_coverHieght / 2), Qt::AlignCenter, texts.at(0));}
}void ShadowButton::enterEvent(QEvent *event)
{Q_UNUSED(event)if (m_animation->state() != QAbstractAnimation::Stopped)m_animation->stop();m_animation->setStartValue(m_offsetY);m_animation->setEndValue(m_coverHieght);m_animation->start();update();
}void ShadowButton::leaveEvent(QEvent *event)
{Q_UNUSED(event)if (m_animation->state() != QAbstractAnimation::Stopped)m_animation->stop();m_animation->setStartValue(m_offsetY);m_animation->setEndValue(m_coverHieght / 2);m_animation->start();update();
}void ShadowButton::setOffsetY(int offsetY)
{m_offsetY = offsetY;update();
}int ShadowButton::offsetY()
{return m_offsetY;
}

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

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

相关文章

Linux:PXE网络装机

要实现需要开启以下服务 dhcp --- 开机没有u盘或光盘的引导电脑会去寻找网络中的引导 tftp --- 用于引导系统 ftp&& http --- 制作yum仓库让引导的系统去ftp或者http上找rpm包 1.ftp&& http yum仓库搭建 Linux&#xff1a;YUM仓库服务_鲍海超-GNUBHC…

HTML 中的常用标签用法

目录 一、html页面基本组成 二、常用的标签 &#xff08;1&#xff09;div &#xff08;2&#xff09;p标签 &#xff08;3&#xff09;h1-h6 &#xff08;4&#xff09;b标签/strong &#xff08;5&#xff09;span &#xff08;6&#xff09;br与hr &#xff08;7&#…

【计算机组成与体系结构Ⅰ】实验4 存储器原理实验

一、实验目的 1&#xff1a;了解双端口静态存储器IDT7132的工作特性及使用方法。 2&#xff1a;了解半导体存储器如何读写。 二、实验总结 0&#xff1a;实验内容 双端口存储器RAM&#xff1a; 左端口的数据部分与数据总线DBUS7-DBUS0相联&#xff1b;右端口的数据引脚与指…

阿里云服务拆分部署

最近在工作中遇到需要将现网运行的服务拆分出一套&#xff0c;放置于本地机房&#xff0c;拆分服务运行有两种方案&#xff1a; 第一种是本地部署一个独立spring应用&#xff0c;业务上的要求是尽量隔离 第二种是采用阿里集群部署 采用第二种方案目前看是隔离度最高的

基于springboot+Redis的前后端分离项目之分布式锁(四)-【黑马点评】

&#x1f381;&#x1f381;资源文件分享 链接&#xff1a;https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwdeh11 提取码&#xff1a;eh11 分布式锁 分布式锁1 、基本原理和实现方式对比2 、Redis分布式锁的实现核心思路3 、实现分布式锁版本一4 、Redis分布式锁误删情况…

硬盘或者U盘提示需要格式化的解决办法

插入硬盘之后提示&#xff1a; 使用驱动器 G:中的光盘之前需要将其格式化 是否要将其格式化? 如下图所示 顿时慌了啊&#xff0c;里面还有比较重要的东西呢&#xff0c;这一下子完蛋&#xff1f; 遇事找某宝&#xff0c;上面估计有这种技术服务。果然有这一类的技术服务&…

飞书接入机器人NODE开发自动回复

一、创建飞书应用 1.登录飞书开放平台 进入开发者后台 创建自建应用 2.添加应用能力 选择机器人添加 3.添加事件订阅并根据权限开通权限 此处只添加获取消息事件 4.配置应用服务端地址&#xff08;当事件触发 会触发设置的地址 并发送事件数据&#xff09;开启Encrypt Key 实…

Spring Boot 中的任务执行器是什么,如何使用

Spring Boot 中的任务执行器是什么&#xff0c;如何使用 Spring Boot 是一个非常流行的 Java 开发框架&#xff0c;它的核心理念是通过简单的配置和约定来提高开发效率。在很多情况下&#xff0c;我们需要在后台执行一些任务&#xff0c;比如异步处理、定时任务等等。为了简化…

【ARM Coresight 系列文章 3 - ARM Coresight 组件 DAP(Debug Access Port) 介绍】

文章目录 1.1 Debug Access Port1.2 Access Port1.2.1 IDR 寄存器 1.3 Mem-APs 介绍1.3.1 Debug 寄存器访问模型1.3.2 APs 中寄存器的介绍 1.1 Debug Access Port 外部 Debugger(DS-5/Trace32) 会通过JTAG接口或者SWD接口和DAP相连&#xff1a; JITAG 一般是5个pin&#xff1…

qt对话框

完善文本编辑器 #include "second.h" #include "ui_second.h"second::second(QWidget *parent) :QWidget(parent),ui(new Ui::second) {ui->setupUi(this);this->setWindowTitle("聊天室界面");//设置标题this->setWindowIcon(QIcon(&…

Spring Boot 中的 @HystrixCommand 注解

Spring Boot 中的 HystrixCommand 注解 简介 在分布式系统中&#xff0c;服务之间的调用是不可避免的。但随着服务数量的增加&#xff0c;服务之间的依赖关系也会变得越来越复杂&#xff0c;服务的故障也会变得越来越常见。一旦某个服务出现故障&#xff0c;它所依赖的服务也…

keepalived 实现 IP 地址漂移

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…