话不多说先看图:
代码不难,自行观看。
MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPropertyAnimation>
#include <QGraphicsOpacityEffect>
#include <QSequentialAnimationGroup>
#include <QPauseAnimation>
#include <QParallelAnimationGroup>
#include <QDebug>
#include <QPainter>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
// 声明属性
// rotate代表属性的名称,类型为int
// READ函数使用“get属性名称”的形式
// WRITE函数使用“set属性名称”的形式
Q_PROPERTY(int rotate READ getRotate WRITE setRotate)
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
public:
void paintEvent(QPaintEvent *event);
int getRotate(); // 获取旋转角度
void setRotate(int rotate); // 设置旋转角度
int m_rotate; // 角度
private slots:
void slot_pushButton_pressed();
// 动画切换时调用
void onCurrentAnimationChanged(QAbstractAnimation*);
public:
QPropertyAnimation *pScaleAnimation; // 缩放控件
QPropertyAnimation *pPosAnimation; // 移动控件
QPropertyAnimation *pOpacityAnimation; // 透明控件
QPropertyAnimation *pAnimationRotate; // 旋转
QSequentialAnimationGroup *pPosGroup; // 串行动画
QParallelAnimationGroup *pParallelGroup; // 并行动画
QGraphicsOpacityEffect *pButtonOpacity; // 设置透明度
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
MainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
,m_rotate(0)
{
ui->setupUi(this);
// 窗口无边框,透明
setAttribute(Qt::WA_TranslucentBackground, true);
setWindowFlags(Qt::FramelessWindowHint);
this->setStyleSheet("QPushButton{ padding: 12px 20px; color: #fff;text-align: center;background: #409eff;;font-weight: 500;font-size: 14px;border: 1px solid #dcdfe6;border-radius: 4px;}"
"QPushButton:hover{background: #66b1ff;border-color: #66b1ff;}"
"QPushButton:pressed{background-color:#0088FF;}"
"QLabel#label_1{background:rgb(140,83,183);border-radius: 4px}"