话不多说先看图:
**第一种方法:**利用Qpainter裁剪图片,没什么毛病,推荐。
**第二种方法:**利用位图setMask()设置蒙版的方法(仔细看图片有锯齿,未解决,可以不用位图,试试用图片做蒙版)
MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QGraphicsDropShadowEffect>
#include <QPropertyAnimation>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
Q_PROPERTY(int borderRadius READ getBorderRadius WRITE setBorderRadius)
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
void init();
protected:
QPixmap scaledPixmap(const QPixmap &src,int width,int height); // 压缩图片为指定宽高
QPixmap generatePixmap(const QPixmap &src,const int &radius); // 实现圆角图片
QPixmap pixmapToRound(const QPixmap &src,const int &radius); // mask实现圆角图片
int getBorderRadius() const;
void setBorderRadius(const int radius);
private:
QGraphicsDropShadowEffect *m_labelDrawShadowEffect; // labelDraw边框阴影
QGraphicsDropShadowEffect *m_labelMaskShadowEffect; // labelMask边框阴影
QPropertyAnimation *m_labelDrawAnimation;
QPropertyAnimation *m_labelMaskAnimation;
int m_borderRadius;
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
MainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPainter>