MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMouseEvent>
#include <QPushButton>
#include <QLabel>
#include <QWidget>
class MainWindow : public QMainWindow {
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
protected:
void mousePressEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
private slots:
void onMinimizeClicked();
void onMaximizeClicked();
void onCloseClicked();
private:
void setupUI();
void setStyles();
QWidget *titleBar; // 自定义标题栏
QLabel *titleLabel;
QLabel *titleIconLabel;
QPushButton *minButton;
QPushButton *maxButton;
QPushButton *closeButton;
QPoint lastMousePosition;
bool isMaximized = false;
bool mousePressed = false;
};
#endif // MAINWINDOW_H
MainWindow.cpp
#include "QtWin.h"
#include <QVBoxLayout>
#define BTN_WIDTH 40
#define BTN_HEIGHT 40
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
setWindowFlags(Qt::FramelessWindowHint); // 去掉系统标题栏
setMinimumSize(8