原理说明
以电脑屏幕左上角为(0,0)点,向右为X轴,向下为Y轴,构建世界坐标系。从鼠标点击位置出发,指向程序窗口左上角位置的向量,在拖曳过程中是不变的。因此,在每一时刻,用鼠标点击位置加上此向量,获得的坐标点即是此刻,程序窗口应移动到的位置。
源代码
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMouseEvent>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
bool m_bPressed;
QPoint m_pXL;
void mousePressEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
};
#endif
mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->setWindowFlag(Qt::FramelessWindowHint);
}
MainWindow::~MainWindow()
{
}
void MainWindow::mousePressEvent(QMouseEvent *event)
{
if(Qt::LeftButton == event->button()){
QPoint qptClickPos = event->globalPos();
QPoint qptAppPos = this->pos();
m_bPressed=true;
m_pXL = qptAppPos-qptClickPos;
}
}
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
if(Qt::LeftButton == event->button()){
m_bPressed = false;
}
}
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
if(m_bPressed){
QPoint pClickedPos = event->globalPos();
this->move(m_pXL+pClickedPos);
}
}