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();
}
}