QT-左右侧边栏动画

  • 演示效果
  • 一、核心程序
  • 二、链接


演示效果

在这里插入图片描述

一、核心程序

#ifndef SLIDEPANEL_H
#define SLIDEPANEL_H#include <QWidget>
#include <QPropertyAnimation>
#include <QPushButton>
#include <QVBoxLayout>class SlidePanel : public QWidget
{Q_OBJECTQ_PROPERTY(int offset READ offset WRITE setOffset)public:enum Direction {Left,Right};explicit SlidePanel(Direction direction, QWidget *parent = nullptr);int offset() const;void setOffset(int offset);void addWidget(QWidget *widget);void toggle();void showPanel();void hidePanel();private:Direction m_direction;int m_offset;int m_panelWidth;bool m_isVisible;QWidget *m_contentWidget;QPropertyAnimation *m_animation;float fParentWidth = 0;void initUI();
};#endif // SLIDEPANEL_H
#include "slidepanel.h"
#include <QApplication>
#include <QDesktopWidget>SlidePanel::SlidePanel(Direction direction, QWidget *parent): QWidget(parent), m_direction(direction),m_offset(0),m_panelWidth(500),m_isVisible(false)
{// 设置窗口属性setWindowFlags(Qt::FramelessWindowHint | Qt::Widget);setAttribute(Qt::WA_TranslucentBackground);//setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);if (parent != nullptr){//parent->widfParentWidth = parent->x() + parent->width();}// 创建动画m_animation = new QPropertyAnimation(this, "offset", this);m_animation->setDuration(300); // 动画持续时间initUI();// 初始隐藏hidePanel();
}int SlidePanel::offset() const
{return m_offset;
}void SlidePanel::setOffset(int offset)
{m_offset = offset;int x = 0;if (m_direction == Left){x = -m_panelWidth + offset;}else if (m_direction == Right){//x = QApplication::desktop()->availableGeometry().width() -offset ;x = fParentWidth - offset;}move(x, y());
}void SlidePanel::addWidget(QWidget *widget)
{if (widget && m_contentWidget) {m_contentWidget->layout()->addWidget(widget);}
}void SlidePanel::toggle()
{if (m_isVisible) {hidePanel();} else {showPanel();}
}void SlidePanel::showPanel()
{m_animation->setStartValue(0);m_animation->setEndValue(m_panelWidth);m_animation->start();m_isVisible = true;show();
}void SlidePanel::hidePanel()
{m_animation->setStartValue(m_panelWidth);m_animation->setEndValue(0);m_animation->start();m_isVisible = false;
}void SlidePanel::initUI()
{// 设置面板大小setFixedWidth(m_panelWidth);setMinimumHeight(QApplication::desktop()->availableGeometry().height() * 1);// 创建主布局QVBoxLayout *mainLayout = new QVBoxLayout(this);mainLayout->setContentsMargins(0, 0, 0, 0);// 创建内容容器m_contentWidget = new QWidget(this);m_contentWidget->setStyleSheet("background-color: white; border-radius: 4px;");QVBoxLayout *contentLayout = new QVBoxLayout(m_contentWidget);// 添加关闭按钮QPushButton *closeBtn = new QPushButton("->", this);if (m_direction == Left){closeBtn->setText("<-");}closeBtn->setStyleSheet("background: none; border: none; font-size: 16px; color: #666;");connect(closeBtn, &QPushButton::clicked, this, &SlidePanel::hidePanel);// 顶部布局(包含关闭按钮)QHBoxLayout *topLayout = new QHBoxLayout();if (m_direction == Left){topLayout->addStretch();topLayout->addWidget(closeBtn);contentLayout->addLayout(topLayout);mainLayout->addWidget(m_contentWidget);}else{topLayout->addWidget(closeBtn);topLayout->addStretch();contentLayout->addLayout(topLayout);mainLayout->addWidget(m_contentWidget);}}

二、链接

https://download.csdn.net/download/u013083044/91732292

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

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

相关文章

WebRTC 结合云手机:释放实时通信与虚拟手机的强大协同效能

开发一个基于 WebRTC 技术的云手机群控系统&#xff0c;实现通过浏览器远程控制多台云手机&#xff0c;并提供文件管理、代理管理、备份管理等功能。这里只详细分享 WebRTC 技术。 https://github.com/LingyuCoder?tabrepositories&qsky&type&language&sort …

Kafka中zk的作用是什么

Zookeeper是分布式协调&#xff0c;注意它不是数据库 kafka中使用了zookeeper的分布式锁和分布式配置及统一命名的分布式协调解决方案 在kafka的broker集群中的controller的选择&#xff0c;是通过zk的临时节点争抢获得的 brokerID等如果自增的话也是通过zk的节点version实现的…

【lucene】lucene常用查询一览

Lucene 里除了常见的 **TermQuery / BooleanQuery / PhraseQuery / FuzzyQuery / SpanNearQuery** 之外&#xff0c;还有不少“特殊家族”。下面按“族”归纳&#xff0c;一眼就能知道它们各自解决什么问题、跟普通倒排检索的差别在哪。────────────────── …

base64认识实际使用

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一&#xff0c;Base64就是一种基于64个可打印字符来表示二进制数据的方法。 Base64&#xff0c;就是包括小写字母a-z、大写字母A-Z、数字0-9、符号"“、”/"一共64个字符的字符集&#xff0c;&#xff08;任何…

LX8201微孔雾化驱动芯片应用笔记一DC5V供电

前言LX8201是深圳市乐⽽信科技服务有限公司最新⾃研的⼀款微孔雾化⽚专⽤驱动芯⽚&#xff0c;结合标准外围电路&#xff0c;能有效驱动控制市⾯上各种微孔雾化⽚&#xff0c;基于独特的电路设计和软件算法&#xff0c;其在功耗以及成本上均具有明显的优势。本应用笔记将帮助用…

MySQL索引优化之索引条件字段类型不同

在sql的联表查询中&#xff0c;on后面相等的两个字段如果字段类型不一致&#xff0c;尽管它们都加了索引&#xff0c;最终查询的时候也不会走索引&#xff0c;这是因为会触发隐式类型转换导致索引失效。 例如 Select * from Orders o left join User u on o.user_id u.id; 假如…

【Linux】信号(二):Linux原生线程库相关接口

【Linux】信号的控制使用一.线程的创建pthread_create()接口二.线程等待1.为什么要线程等待&#xff1f;2.pthread_join()三.线程中止1.return2.pthread_exit五.线程应用C自带多线程在上次的博客中主要讲解了什么是线程 这次的博客主要是带大家把线程的相关接口简单的使用一下 …

小程序被爬虫攻击,使用waf能防护吗?

在移动互联网时代&#xff0c;小程序以轻量化、高便捷性成为流量入口新宠&#xff0c;但也因此成为爬虫攻击的重灾区。从电商平台的价格数据爬取到内容平台的版权盗用&#xff0c;爬虫攻击不仅消耗服务器资源&#xff0c;更可能导致商业机密泄露与用户权益受损。面对这类威胁&a…

通过自动化本地计算磁盘与块存储卷加密保护数据安全

作为打造开发者首选云平台使命的一部分&#xff0c;我们持续推出免费的智能化功能与产品来加强云资源安全。最新推出的本地磁盘加密功能是我们正在所有核心计算区域逐步部署的最新计算特性。当您在首选区域启用本地磁盘加密功能后&#xff0c;新部署的计算实例将默认自动启用数…

中文房间悖论:人工智能理解力的哲学拷问

本文由「大千AI助手」原创发布&#xff0c;专注用真话讲AI&#xff0c;回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我&#xff0c;一起撕掉过度包装&#xff0c;学习真实的AI技术&#xff01;1 思想实验阐述中文房间&#xff08;Chinese Room&#xff09;思想实验…

mac如何运行windows程序?性能党vs便捷党选择指南

macOS的流畅稳定虽让人青睐&#xff0c;但系统的不兼容性是个大问题。有的用户想要使用某个专业程序&#xff0c;发现只有Windows版本&#xff0c;然而没法直接在mac上运行&#xff0c;非常懊恼&#xff01;mac如何运行windows程序&#xff1f;本文将提供多个可行的方法&#x…

设置电机数据(闭环驱动器C5-E) ——易格斯igus

4.3 设置电机数据 在调试之前&#xff0c;电机控制器需要电机数据表中的一些值。 ■ 极对数&#xff1a;对象 2030h&#xff1a;00h&#xff08;极对数&#xff09; 电机极对数应在此处输入。对于步进电机&#xff0c;极对数使用步距角计算&#xff0c;例如&#xff0c;1.8 …

药品追溯码(溯源码)采集系统(二):门诊发药后端

门诊发退药追溯码采集系统解析&#xff1a;一、门诊发退药追溯码数据表1.1、Wm_ware_dispense_bill表&#xff1a;该表用于存储处方信息1.2 Wm_ware_dispense_tracecode:追溯码采集表二、发退药后端代码后端代码基于Springboot架构和mybatis-plus&#xff0c;先看主要接口信息&…

Unity编辑器相关

前言继承EditorWindow。 GUILayout类与EditorGUILayout类的应用区别&#xff1a;//TODO创建窗口的方法1&#xff09;GetWindow<T>() 已开则聚焦、未开则创建。无需再手动调用 Show()。GetWindow<T>() 提供多个重载。2&#xff09;CreateInstance<T>()始终创建…

ES支持哪些数据类型,和MySQL之间的映射关系是怎么样的?

Elasticsearch&#xff08;简称 ES&#xff09;是一个分布式搜索和分析引擎&#xff0c;支持丰富的数据类型来适应不同场景。MySQL 是一个关系型数据库&#xff0c;两者在数据类型上存在差异&#xff0c;但可以通过映射实现数据同步或集成。下面我将逐步解释 ES 支持的数据类型…

8.21IPSEC安全基础后篇,IKE工作过程

一、数据存储完整性校验数据存储完整性校验需通过加密密钥实现。数据存储前还需通过身份认证&#xff0c;该过程同样依赖密钥完成。二、对称key的产生、传递、管理VPN中需使用多组对称密钥&#xff1a;数据加解密需独立密钥数据完整性校验需独立密钥身份认证需独立密钥不同功能…

网络连接的核心机制

一、网络连接全流程拆解&#xff08;含7大步骤动态交互&#xff09; 1. 用户输入网址&#xff1a;从域名到IP的跨越 操作触发&#xff1a;用户在浏览器输入 www.example.com&#xff0c;触发 DNS域名解析。核心协议&#xff1a;DNS&#xff08;基于UDP/TCP&#xff09;。硬件设…

小程序个人信息安全检测技术:从监管视角看加密与传输合规

1. 前言 在监管通报中&#xff0c;小程序因“未采取加密、去标识化等安全技术措施”被处罚的案例屡见不鲜。很多开发者疑惑&#xff1a;明明用了HTTPS&#xff0c;为什么还会被判定“未加密”&#xff1f;监管机构是如何通过技术手段发现这些问题的&#xff1f;本文将从技术原…

ansible playbook 实战案例roles | 实现db2自动安装

文章目录一、核心功能描述二、roles内容2.1 文件结构2.2 主配置文件2.3 tasks文件内容三、files文件内容四、vars文件内容免费个人运维知识库&#xff0c;欢迎您的订阅&#xff1a;literator_ray.flowus.cn 一、核心功能描述 这个 Ansible Role 的核心功能是&#xff1a;​自动…

webrtc中win端音频---windows Core Audio

一、Core Audio 系统内核框架 图中显示的是渲染的音频数据如何从大多数应用程序流向扬声器的简化表示。对于采集来说,音频数据的路径是完全相同,但流向是相反的。从图中可以看到,一些高阶API(例如MME,DirectSound等),对 Core Audio APIs 进行了封装,使用这些API能够更容…