1.this->setWindowFlags(Qt::FramelessWindowHint);//去掉边框
2.重载QWidget类的鼠标移动事件
virtual void mouseMoveEvent(QMouseEvent *event);//字体是斜体,是虚函数
virtual void mousePressEvent(QMouseEvent *event);
virtual void mouseReleaseEvent(QMouseEvent *event);
注意鼠标移动的时候,z的值是不变的,也就是,鼠标相对窗口左上角的值
QPoint y = event->globalPos();//globalPos()鼠标的全局位置,相对于桌面左上角的
QPoint x = this->geometry().topLeft();//窗口左上角相对于桌面左上角的位置
this->z = ymouse_winLeftTop - xFrame_winLeftTop;//z是不变的,鼠标相对于桌面左上角的
x = y-z;
x是在mouseMoveEvent函数的move函数的参数。
this->move(x);
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPoint>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
virtual void mouseMoveEvent(QMouseEvent *event);//字体是斜体,是虚函数
virtual void mousePressEvent(QMouseEvent *event);
virtual void mouseReleaseEvent(QMouseEvent *event);
private:
Ui::MainWindow *ui;
QPoint z ;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMouseEvent>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowFlags(Qt::FramelessWindowHint);//去掉边框
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
QWidget::mouseMoveEvent(event);
QPoint ymouse_winLeftTop = event->globalPos();//globalPos()鼠标的全局位置,相对于桌面左上角的
QPoint x = ymouse_winLeftTop - this->z;
this->move(x);
}
void MainWindow::mousePressEvent(QMouseEvent *event)
{
QWidget::mousePressEvent(event);
QPoint ymouse_winLeftTop = event->globalPos();//globalPos()鼠标的全局位置,相对于桌面左上角的
QPoint xFrame_winLeftTop = this->geometry().topLeft();//窗口左上角相对于桌面左上角的位置
this->z = ymouse_winLeftTop - xFrame_winLeftTop;//z是不变的,鼠标相对于桌面左上角的
}
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
QWidget::mouseReleaseEvent(event);
this->z = QPoint();
}
其实在按下的时候,鼠标相对于窗口的值就可以知道了z=event->pos();
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
QWidget::mouseMoveEvent(event);
//移动到哪里,鼠标的全局位置 - 鼠标的局部位置
QPoint x = event->globalPos();
QPoint y = x - this->z;
this->move(y);
}
void MainWindow::mousePressEvent(QMouseEvent *event)
{
QWidget::mousePressEvent(event);
z=event->pos();
}
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
QWidget::mouseReleaseEvent(event);
this->z = QPoint();
}