Qt 窗口随鼠标移动效果

实现在窗口任意位置按下鼠标左键都可以移动窗口的效果,完整代码如下:

mainwindow.h:

cpp 复制代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMouseEvent>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT
    
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
protected:
    // 重写父类鼠标点击事件:鼠标按下的时候记录偏移量,方便鼠标移动时使用
    void mousePressEvent(QMouseEvent *event) override;
    // 重写父类鼠标移动事件
    void mouseMoveEvent(QMouseEvent *event) override;
private:
    Ui::MainWindow *ui;
    QPoint m_offset;// 窗口移动时,鼠标点击位置和窗口左上角的偏移量
};
#endif // MAINWINDOW_H

mainwindow.cpp:

cpp 复制代码
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}
// 重写父类鼠标点击事件:鼠标按下的时候记录偏移量,方便鼠标移动时使用
void MainWindow::mousePressEvent(QMouseEvent *event)
{
    // event->globalPos():鼠标点击位置和桌面左上角的距离
    // this->pos():窗口左上角位置和桌面左上角位置的距离
    m_offset = event->globalPos() - this->pos();
}
// 重写父类鼠标移动事件
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
    // this->move():设置窗口左上角的位置
    // event->globalPos():鼠标点击位置和桌面左上角的距离
    this->move(event->globalPos() - m_offset);
}
相关推荐
初阳7851 小时前
【Qt】系统相关(3)——多线程
qt
初阳7854 小时前
【Qt】系统相关(2)——文件
开发语言·qt
尘中远17 小时前
【Qwt 7.0 系列】坐标轴与刻度系统 —— 刻度引擎、网格、图例与刻度朝内
qt·数据可视化·qcustomplot·qwt·工业软件·科学绘图
sycmancia19 小时前
Qt——多线程间的互斥
开发语言·qt
尘中远1 天前
【Qwt 7.0 系列】常用图表类型实战 —— 柱状图、散点图、箱线图与直方图
qt·qwt·工业软件·科学绘图
尘中远1 天前
【Qwt 7.0 系列】交互功能详解 —— 平移、缩放、坐标轴交互与数据拾取
qt·数据可视化·绘图·qcustomplot·qwt·科学绘图
sycmancia1 天前
Qt——进程与线程的概念
qt
郝学胜-神的一滴1 天前
Qt 高级编程 034:深耕QWidget底层内核—彻底吃透无边框窗口设计核心原理
开发语言·c++·qt·程序人生·软件开发·用户界面
尘中远1 天前
【Qwt 7.0 系列】3D 数据可视化 —— OpenGL 高性能三维绘图
qt·3d·qcustomplot·qwt·科学绘图·高性能绘图
满天星83035771 天前
【Qt】控件(二) (geometry及与frameGeometry的区别)
开发语言·qt