QT-左右側邊欄動畫

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能夠更容…