Widget.h
#pragma once
#include <QLabel>
class Widget : public QLabel
{
Q_OBJECT
public:
Widget(QLabel *parent = NULL);
~Widget();
protected:
void mousePressEvent(QMouseEvent * event);
void mouseMoveEvent(QMouseEvent * event);
void mouseReleaseEvent(QMouseEvent * event);
};
Widget.cpp
#include "Widget.h"
#include <QToolButton>
#include <QMouseEvent>
#include <QBitmap>
bool m_Drag; //判断鼠标左键是否按下
QPoint m_DragPosition;
Widget::Widget(QLabel *parent)
: QLabel(parent)
{
setWindowTitle("Test");
// 设置窗口置顶及无边框
setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
QPixmap pixmap;
pixmap.load(":/Demo/images/2.png");
setAttribute(Qt::WA_TranslucentBackground); // 设置窗口透明
this->setPixmap(pixmap); // 设置图片
this->setMask(QBitmap(pixmap.mask())); // 设置为图片形状的不规则图形
this->resize(pixmap.size());
}
Widget::~Widget()
{
}
void Widget::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
m_Drag = true;
m_DragPosition = event->globalPos() - this->pos();
event->accept();
}
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
if (m_Drag && (event->buttons() && Qt::LeftButton)) {
move(event->globalPos() - m_DragPosition);
event->accept();
}
}
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
m_Drag = false;
}
main.cpp
#include "Demo.h"
#include "Widget.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Demo w;
w.show();
Widget dlg; // 置顶的不规则图形
dlg.show();
return a.exec();
}
参考资料: