Qt不规则可移动窗体的实现

实现:

可以借助不规则的位图来实现不规则窗体,并支持拖动和移动。下面分别是头文件和源文件

cpp 复制代码
#ifndef SHAPEWIDGET_H
#define SHAPEWIDGET_H

#include <QWidget>

class ShapeWidget : public QWidget
{
    Q_OBJECT
    
public:
    ShapeWidget(QWidget *parent = 0);
    ~ShapeWidget();
protected:
    void mousePressEvent(QMouseEvent *);
    void mouseMoveEvent(QMouseEvent *);
    void paintEvent(QPaintEvent *);
private:
    QPoint dragPosition;
};

#endif // SHAPEWIDGET_H
cpp 复制代码
#include "shapewidget.h"
#include <QMouseEvent>
#include <QPainter>
#include <QPixmap>
#include <QBitmap>

ShapeWidget::ShapeWidget(QWidget *parent)
    : QWidget(parent)
{
    QPixmap pix;
    pix.load("16.png",0,Qt::AvoidDither|Qt::ThresholdDither|Qt::ThresholdAlphaDither);
    resize(pix.size());
    setMask(QBitmap(pix.mask()));

    setWindowFlag(Qt::FramelessWindowHint);
}

ShapeWidget::~ShapeWidget()
{
    
}

void ShapeWidget::mousePressEvent(QMouseEvent *event)
{
    if(event->button()==Qt::LeftButton)
    {
        dragPosition =event->globalPos()-frameGeometry().topLeft();
        event->accept();
    }
    if(event->button()==Qt::RightButton)
    {
        close();
    }
}

void ShapeWidget::mouseMoveEvent(QMouseEvent *event)
{
    if(event->buttons()&Qt::LeftButton)
    {
        move(event->globalPos()-dragPosition);
        event->accept();
    }
}

void ShapeWidget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.drawPixmap(0,0,QPixmap("16.png"));
}
相关推荐
GIS阵地14 小时前
QgsRasterDataProvider 完整详解(QGIS 3.40.13 C++)
开发语言·c++·qt·开源软件·qgis
sycmancia21 小时前
Qt——多线程中的信号与槽(二)
jvm·qt
Quz2 天前
QML Label 完整用法与 Text 组件选型
前端·qt
kaixin_learn_qt_ing2 天前
QPluginLoader
qt
kaixin_learn_qt_ing2 天前
Qt 提升部件(Promote)找不到头文件路径
qt
秋田君3 天前
QT_QT布局详解
开发语言·数据库·qt
辞旧 lekkk3 天前
【Qt系统相关】鼠标事件
linux·开发语言·qt·学习·计算机外设·萌新
brave_zhao3 天前
什么是Qt Designer
开发语言·qt
贺国亚3 天前
A2A协议与Agent互操作-Task生命周期
开发语言·qt
luoyayun3613 天前
Qt + FFmpeg 视频工具:视频一键压缩功能实现
qt·ffmpeg·音视频·视频压缩