- 创建新项目testMask,继承QWidget,添加Qt Resource file文件,添加图片资源
- 往ui界面中拖入一个label标签部件,标签文字内容设置为空白
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
namespace Ui {class Widget;}
class Widget : public QWidget{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
protected:
void paintEvent(QPaintEvent *event) override; //重写绘图事件
void mousePressEvent(QMouseEvent *event) override; //重写鼠标按下事件
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QPixmap> //图片
#include <QBitmap> //遮罩
#include <QPainter> //画家
#include <QMouseEvent> //鼠标事件
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) {
ui->setupUi(this);
QPixmap pixmap(":/abc.png"); //加载图片
ui->label->resize(pixmap.size()); //设置标签大小
this->resize(pixmap.size()); //设置窗体大小
setMask(pixmap.mask()); //设置遮罩
}
Widget::~Widget(){ delete ui; }
void Widget::paintEvent(QPaintEvent *event){
QPainter painter(this);
painter.drawPixmap(0,0, QPixmap(":/abc.png"));
}
void Widget::mousePressEvent(QMouseEvent *event){
//如果按下的是鼠标左键,就关闭窗口
if(event->button() == Qt::LeftButton){
close();
}
}
最终效果
拖入两个按钮效果