您的位置:首页 > 游戏 > 手游 > 使用Qt this->pos,和event->pos 实现界面跟随鼠标移动

使用Qt this->pos,和event->pos 实现界面跟随鼠标移动

2024/10/6 5:57:01 来源:https://blog.csdn.net/cat_fish_rain/article/details/141915865  浏览:    关键词:使用Qt this->pos,和event->pos 实现界面跟随鼠标移动

对比

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>

剩下的就是默认生成的代码。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com