From e171904a342a493912fc33e4ee73626180349aa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=9A=E5=AD=90?= Date: Sun, 11 Dec 2022 00:17:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=BD=E8=B1=A1=E5=87=BA=E6=8E=A7=E4=BB=B6?= =?UTF-8?q?=E5=8A=A8=E7=94=BB=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mainwindow-dtk.cpp | 34 ++----------------------- src/mainwindow-dtk.h | 2 +- src/spark-store.pro | 2 ++ src/utils/widgetanimation.cpp | 47 +++++++++++++++++++++++++++++++++++ src/utils/widgetanimation.h | 16 ++++++++++++ 5 files changed, 68 insertions(+), 33 deletions(-) create mode 100644 src/utils/widgetanimation.cpp create mode 100644 src/utils/widgetanimation.h diff --git a/src/mainwindow-dtk.cpp b/src/mainwindow-dtk.cpp index 2a6964e..116a2f8 100644 --- a/src/mainwindow-dtk.cpp +++ b/src/mainwindow-dtk.cpp @@ -18,17 +18,7 @@ MainWindow::MainWindow(QWidget *parent) initConfig(); moveToCenter(this); //让窗口居中显示 - QPropertyAnimation *animation = new QPropertyAnimation(this, "windowOpacity", this); - //设置动画效果 - animation->setEasingCurve(QEasingCurve::Linear); - //设置动画时间(单位:毫秒) - animation->setDuration(500); - // 设置动画步长值,以及在该位置时显示的透明度 - animation->setKeyValueAt(0, 0); - // m_animation->setKeyValueAt(0.5, 0); - animation->setKeyValueAt(1, 1); - // 开始动画 - animation->start(); + WidgetAnimation::widgetOpacity(this,true); downloadlistwidget = new DownloadListWidget; downloadButton = new QPushButton(ui->titlebar); @@ -112,7 +102,7 @@ MainWindow::MainWindow(QWidget *parent) //appintopage按下下载按钮时标题栏下载列表按钮抖动 connect(ui->appintopage, &AppIntoPage::clickedDownloadBtn, [=]() { - widgetShake(downloadButton,6);//第一个参数是抖动的控件,第二个参数是抖动范围(像素) + WidgetAnimation::widgetShake(downloadButton,6);//第一个参数是抖动的控件,第二个参数是抖动范围(像素) }); connect(backButtom, &QPushButton::clicked, [=]() { @@ -190,26 +180,6 @@ MainWindow::~MainWindow() delete ui; } -void MainWindow::widgetShake(QWidget *pWidget, int nRange) -{ - int nX = pWidget->x(); - int nY = pWidget->y(); - QPropertyAnimation *pAnimation = new QPropertyAnimation(pWidget,"geometry"); - pAnimation->setEasingCurve(QEasingCurve::InOutSine); - pAnimation->setDuration(400); - pAnimation->setStartValue(QRect(QPoint(nX,nY),pWidget->size())); - - int nShakeCount = 8; - double nStep = 1.0/nShakeCount; - for(int i = 1; i < nShakeCount; i++){ - nRange = i&1 ? -nRange : nRange; - pAnimation->setKeyValueAt(nStep*i,QRect(QPoint(nX + nRange,nY),pWidget->size())); - } - - pAnimation->setEndValue(QRect(QPoint(nX,nY),pWidget->size())); - pAnimation->start(QAbstractAnimation::DeleteWhenStopped); -} - void MainWindow::openUrl(QUrl url) { if (url.toString().startsWith("spk://")) { diff --git a/src/mainwindow-dtk.h b/src/mainwindow-dtk.h index 5a54117..b59be27 100644 --- a/src/mainwindow-dtk.h +++ b/src/mainwindow-dtk.h @@ -13,6 +13,7 @@ #include #include "widgets/downloadlistwidget.h" +#include "utils/widgetanimation.h" DWIDGET_USE_NAMESPACE @@ -31,7 +32,6 @@ public: void openUrl(QUrl); private: - void widgetShake(QWidget *pWidget, int nRange); void initConfig(); void switchPage(int now); void updateUi(int now); diff --git a/src/spark-store.pro b/src/spark-store.pro index 25d3e0e..193d521 100644 --- a/src/spark-store.pro +++ b/src/spark-store.pro @@ -35,6 +35,7 @@ SOURCES += \ mainwindow-dtk.cpp \ backend/sparkapi.cpp \ pages/settingspage.cpp \ + utils/widgetanimation.cpp \ widgets/common/webenginepage.cpp \ widgets/common/webengineview.cpp \ widgets/downloadlistwidget.cpp \ @@ -52,6 +53,7 @@ HEADERS += \ mainwindow-dtk.h \ backend/sparkapi.h \ pages/settingspage.h \ + utils/widgetanimation.h \ widgets/common/webenginepage.h \ widgets/common/webengineview.h \ widgets/downloadlistwidget.h \ diff --git a/src/utils/widgetanimation.cpp b/src/utils/widgetanimation.cpp new file mode 100644 index 0000000..7bf2a67 --- /dev/null +++ b/src/utils/widgetanimation.cpp @@ -0,0 +1,47 @@ +#include "widgetanimation.h" + +WidgetAnimation::WidgetAnimation() +{ + +} + +void WidgetAnimation::widgetShake(QWidget *pWidget, int nRange) +{ + int nX = pWidget->x(); + int nY = pWidget->y(); + QPropertyAnimation *pAnimation = new QPropertyAnimation(pWidget,"geometry"); + pAnimation->setEasingCurve(QEasingCurve::InOutSine); + pAnimation->setDuration(400); + pAnimation->setStartValue(QRect(QPoint(nX,nY),pWidget->size())); + + int nShakeCount = 8; + double nStep = 1.0/nShakeCount; + for(int i = 1; i < nShakeCount; i++){ + nRange = i&1 ? -nRange : nRange; + pAnimation->setKeyValueAt(nStep*i,QRect(QPoint(nX + nRange,nY),pWidget->size())); + } + + pAnimation->setEndValue(QRect(QPoint(nX,nY),pWidget->size())); + pAnimation->start(QAbstractAnimation::DeleteWhenStopped); +} + +void WidgetAnimation::widgetOpacity(QWidget *pWidget, bool isAppear) +{ + QPropertyAnimation *animation = new QPropertyAnimation(pWidget, "windowOpacity", pWidget); + //设置动画效果 + animation->setEasingCurve(QEasingCurve::Linear); + //设置动画时间(单位:毫秒) + animation->setDuration(500); + // 设置动画步长值,以及在该位置时显示的透明度 + if(isAppear) + { + animation->setKeyValueAt(0, 0); + // m_animation->setKeyValueAt(0.5, 0); + animation->setKeyValueAt(1, 1); + }else{ + animation->setKeyValueAt(0, 1); + animation->setKeyValueAt(1, 0); + } + // 开始动画 + animation->start(); +} diff --git a/src/utils/widgetanimation.h b/src/utils/widgetanimation.h new file mode 100644 index 0000000..0223e67 --- /dev/null +++ b/src/utils/widgetanimation.h @@ -0,0 +1,16 @@ +#ifndef WIDGETANIMATION_H +#define WIDGETANIMATION_H + +#include +#include +#include + +class WidgetAnimation +{ +public: + WidgetAnimation(); + static void widgetShake(QWidget *pWidget, int nRange); + static void widgetOpacity(QWidget *pWidget, bool isAppear); +}; + +#endif // WIDGETANIMATION_H