實現在窗口任意位置按下鼠標左鍵都可以移動窗口的效果,完整代碼如下:
mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QMouseEvent>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();
protected:// 重寫父類鼠標點擊事件:鼠標按下的時候記錄偏移量,方便鼠標移動時使用void mousePressEvent(QMouseEvent *event) override;// 重寫父類鼠標移動事件void mouseMoveEvent(QMouseEvent *event) override;
private:Ui::MainWindow *ui;QPoint m_offset;// 窗口移動時,鼠標點擊位置和窗口左上角的偏移量
};
#endif // MAINWINDOW_H
mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}
// 重寫父類鼠標點擊事件:鼠標按下的時候記錄偏移量,方便鼠標移動時使用
void MainWindow::mousePressEvent(QMouseEvent *event)
{// event->globalPos():鼠標點擊位置和桌面左上角的距離// this->pos():窗口左上角位置和桌面左上角位置的距離m_offset = event->globalPos() - this->pos();
}
// 重寫父類鼠標移動事件
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{// this->move():設置窗口左上角的位置// event->globalPos():鼠標點擊位置和桌面左上角的距離this->move(event->globalPos() - m_offset);
}