对比
this->pos() 表示当前窗口左上角相对于整个桌面屏幕的位置。
如下图所示
event->globalPos() 是当前鼠标点击的位置相对于桌面的位置。
想要做到鼠标界面跟随鼠标左键移动,就需要计算他们的相对位置。
最后让鼠标移动到新的位置的时候,使用event->globalPos()-offset 就可以得到移动之后程序的左上角(this->pos) 的坐标,让界面移动到那个位置就可以了。
代码如下。
代码如下:
widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QMouseEvent>
#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private:QPoint mOffset;protected:void mouseMoveEvent(QMouseEvent *event) override;void mousePressEvent(QMouseEvent *event) override;private:Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}void Widget::mouseMoveEvent(QMouseEvent *event)
{this->move(event->globalPos()-mOffset);
}void Widget::mousePressEvent(QMouseEvent *event)
{if(event->button()==Qt::LeftButton){mOffset=event->globalPos()-this->pos();}}
ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>Widget</class><widget class="QWidget" name="Widget"><property name="geometry"><rect><x>0</x><y>0</y><width>479</width><height>707</height></rect></property><property name="windowTitle"><string>Widget</string></property><property name="styleSheet"><string notr="true">background-color: rgb(255, 155, 67);</string></property><widget class="QLabel" name="label"><property name="geometry"><rect><x>140</x><y>200</y><width>72</width><height>15</height></rect></property><property name="text"><string>测试</string></property></widget></widget><resources/><connections/>
</ui>
剩下的就是默认生成的代码。