效果图:
头文件
#ifndef QWHROTATEBORDERWIDGET_H
#define QWHROTATEBORDERWIDGET_H
/*
* 窗体边框旋转效果
* 该控件支持为任意继承自QWidget的窗体设置效果
* 该控件支持设置边框宽度
* 该控件支持设置边框颜色
* 该控件支持设置高光颜色
* 该控件支持设置高光占比
*/
#include <QWidget>
#include <QPainter>
#include <QPaintEvent>
#include <QResizeEvent>
#include <QPropertyAnimation>
#include <QHBoxLayout>
class QWHRotateBorderWidget : public QWidget
{
Q_OBJECT
Q_PROPERTY(float m_pos1 READ getPos1 WRITE setPos1)
Q_PROPERTY(float m_pos2 READ getPos2 WRITE setPos2)
public:
//边框位置
enum Dir
{
Top, //上
Right, //右
Bottom, //下
Left, //左
};
explicit QWHRotateBorderWidget(QWidget *parent = nullptr);
~QWHRotateBorderWidget();
public:
//设置特效的窗体
void setWidget(QWidget *widget);
//设置边距(边距=线条宽度)
void setMarginis(int margins);
//设置边框颜色
void setBorderColor(QColor color);
//设置高光颜色
void setLightColor(QColor color);
//设置高光占比(高光/宽)
void setLightColorPercent(float percent);
//获取边距
int getMargins();
//获取边框颜色
QColor getBorderColor();
//获取高光颜色
QColor getLightColor();
//获取高光占比(高光/宽)
float getLightColorPercent();
protected:
void paintEvent(QPaintEvent *);
void drawBorder(QPainter *painter);
void resizeEvent(QResizeEvent *);
private slots:
//动画结束时函数处理
void onFinished();
void setPos1(float pos);
void setPos2(float pos);
float getPos1();
float getPos2();
private:
float m_colorPercent; //高光占比(高光/宽)
int m_contentMargin; //保存控件边距
Dir m_dir1; //保存当前进入边框:上/右边框
Dir m_dir2; //保存当前进入边框:下/左边框
float m_pos1; //保存当前进入边框的位置:上/右边框
float m_pos2; //保存当前进入边框的位置:下/左边框
float m_width; //保存当前窗口宽度
float m_height; //保存当前窗口高度
QColor m_borderColor; //边框颜色
QColor m_color; //边框高光
QWidget *m_widget; //特效窗体
QHBoxLayout *m_hLayout; //水平布局
QPropertyAnimation *m_animation1; //动画1:上/右边框
QPropertyAnimation *m_animation2; //动画2:下/左边框
};
#endif // QWHROTATEBORDERWIDGET_H