QT中提供部件遮罩mask来实现不规则窗体
启动运行一张图片-可拖动-双击关闭。
#ifndef MAINWINDOW8_3_H
#define MAINWINDOW8_3_H
#include
//by txwtech 2022.9.25
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow8_3; }
QT_END_NAMESPACE
class MainWindow8_3 : public QWidget
{
Q_OBJECT
public:
MainWindow8_3(QWidget *parent = nullptr);
~MainWindow8_3();
private:
Ui::MainWindow8_3 *ui;
QPoint offset2;//用来储存鼠标指针位置与窗口位置的差值
protected:
void paintEvent(QPaintEvent *event) ;
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event);
};
#endif // MAINWINDOW8_3_H
#include "mainwindow8_3.h"
#include "ui_mainwindow8_3.h"
#include
#include
#include
#include
MainWindow8_3::MainWindow8_3(QWidget *parent)
: QWidget(parent)
, ui(new Ui::MainWindow8_3)
{
ui->setupUi(this);
// QPixmap pixmap(":/img/xiongmao2.png");
// ui->label->setPixmap(pixmap);
// ui->label->setMask(pixmap.mask());
QPixmap pix;
pix.load(":/img/xiongmao2.png");
resize(pix.size());
setMask(pix.mask());
}
MainWindow8_3::~MainWindow8_3()
{
delete ui;
}
void MainWindow8_3::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawPixmap(0,0,QPixmap(":/img/xiongmao2.png"));
}
void MainWindow8_3::mousePressEvent(QMouseEvent *event)
{
if(event->button()==Qt::LeftButton)
{
//左键按下
QCursor cursor2a;
cursor2a.setShape(Qt::ClosedHandCursor);
QApplication::setOverrideCursor(cursor2a);//是鼠标指针暂时改变形状
offset2=event->globalPos()-pos();//获取指针位置和窗口位置的差值
}
//————————————————
// 版权声明:本文为CSDN博主「txwtech」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
//原文链接:https://blog.csdn.net/txwtech/article/details/126800415
}
void MainWindow8_3::mouseMoveEvent(QMouseEvent *event)
{
//鼠标移动事件
if(event->buttons() & Qt::LeftButton)//这里必须使用buttons(),这里多了一个s,注意与mousePressEvent里面判断左键的区分
{
QPoint temp;
temp=event->globalPos()-offset2;
move(temp);//使用鼠标指针当前的位置减去差值,就得到了窗口应该移动的位置
}
// ————————————————
// 版权声明:本文为CSDN博主「txwtech」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
//原文链接:https://blog.csdn.net/txwtech/article/details/126800415
}
void MainWindow8_3::mouseDoubleClickEvent(QMouseEvent *event)
{
close();
}