qt实现无边框 鼠标重写 上边框可以移动

framelesswidge.h

#ifndef FRAMELESSWIDGET_H
#define FRAMELESSWIDGET_H

#include <QMainWindow>
#include <QMouseEvent>
#include <QPainter>

class FramelessWidget : public QMainWindow
{
    Q_OBJECT
public:
    explicit FramelessWidget(QWidget *parent = nullptr);

protected:
    void paintEvent(QPaintEvent *event) override;
    void mousePressEvent(QMouseEvent *event) override;
    void mouseMoveEvent(QMouseEvent *event) override;
    void mouseReleaseEvent(QMouseEvent *event) override;
private:
    bool dragging = false;
    QPoint dragPosition;

};

#endif // FRAMELESSWIDGET_H

framelesswidge.cpp

#include "framelesswidget.h"

FramelessWidget::FramelessWidget(QWidget *parent)
    : QMainWindow(parent), dragging(false) {
    setWindowFlags(Qt::Window | Qt::CustomizeWindowHint);
    setAttribute(Qt::WA_TranslucentBackground);
}

void FramelessWidget::paintEvent(QPaintEvent *event) {
    QMainWindow::paintEvent(event);

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);

    QRect titleBarRect = rect();
    titleBarRect.setHeight(30);

    painter.fillRect(titleBarRect, QColor(60, 60, 60));

    QPen borderPen(QColor(60, 60, 60));
    borderPen.setWidth(5);
    painter.setPen(borderPen);
    painter.drawRect(rect().adjusted(2, 2, -2, -2));

    painter.setPen(Qt::white);
    painter.drawText(titleBarRect, Qt::AlignCenter, windowTitle());
}

void FramelessWidget::mousePressEvent(QMouseEvent *event) {
    if (event->button() == Qt::LeftButton && event->pos().y() <= 100) {
        dragging = true;
        dragPosition = event->globalPos() - frameGeometry().topLeft();
        event->accept();
    }
}

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

void FramelessWidget::mouseReleaseEvent(QMouseEvent *event) {
    if (event->button() == Qt::LeftButton) {
        dragging = false;
        event->accept();
    }
}

猜你喜欢

转载自blog.csdn.net/lsw2604190117/article/details/138954565
今日推荐