无边框窗口的移动

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();
}
发布了24 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/yonggandess/article/details/103060194