QT中实现窗口的拖拽主要利用的是三个事件的重写

mousePressEvent

重写后检测到鼠标按下左键时记录按下的point的坐标以及拖拽的窗口的坐标point

mouseMoveEvent

重写后判断若是在拖动状态,记录鼠标移动的位置差,即目前的位置减去鼠标原来的位置,并将窗口move到窗口的坐标point加上目前的位置差的最新位置

mouseReleaseEvent

重写后在鼠标左键放下后判断拖拽结束

.h文件

#ifndef DRAGWIDGET_H
#define DRAGWIDGET_H#include <QtWidgets/QWidget>
#include "ui_dragwidget.h"
#include <QMouseEvent>class DragWidget : public QWidget
{Q_OBJECTpublic:DragWidget(QWidget *parent = Q_NULLPTR);protected:void mousePressEvent(QMouseEvent* event);void mouseMoveEvent(QMouseEvent* event);void mouseReleaseEvent(QMouseEvent* event);private:Ui::DragWidgetClass ui;bool is_drag_ = false;QPoint mouse_start_point_;QPoint window_start_point_;
};#endif //DRAGWIDGET_H

.cpp文件

#include "dragwidget.h"DragWidget::DragWidget(QWidget *parent): QWidget(parent)
{ui.setupUi(this);
}void DragWidget::mousePressEvent(QMouseEvent* event)
{if (event->button() == Qt::LeftButton){is_drag_ = true;//获得鼠标的初始位置mouse_start_point_ = event->globalPos();//获得窗口的初始位置window_start_point_ = this->frameGeometry().topLeft();}
}void DragWidget::mouseMoveEvent(QMouseEvent* event)
{//判断是否在拖拽移动if (is_drag_){//获得鼠标移动的距离QPoint move_distance = event->globalPos() - mouse_start_point_;//改变窗口的位置this->move(window_start_point_ + move_distance);}
}void DragWidget::mouseReleaseEvent(QMouseEvent* event)
{//放下左键即停止移动if (event->button() == Qt::LeftButton){is_drag_ = false;}
}

Qt鼠标拖拽窗口移动事件相关推荐

  1. Qt 实现鼠标拖拽窗口移动

    在Qt中实现鼠标拖动窗口可以分为三个步骤来做: 鼠标在窗口按下左键时,获取到当前鼠标的位置,并且计算offset,即鼠标当前位置减去窗口左上角坐标; 鼠标移动时,因为是单击鼠标,所以会一直执行第一步, ...

  2. 弹出框的鼠标拖拽事件

    几个与定位有关的概念: js: clientX/clientY属性:获得事件发生时鼠标指针在视口中的水平和垂直坐标. screenX/screenY属性:获取鼠标事件发生时鼠标光标相对于整个电脑屏幕的 ...

  3. JavaFX鼠标拖拽事件

    一.节点原拖拽事件 //鼠标拖拽进入node node.setOnMouseDragEntered(event->{//do something });//鼠标拖拽退出node node.set ...

  4. java 鼠标拖拽事件_Java实现鼠标拖拽移动界面组件

    默认的,Frame或者JFrame自身已经实现了鼠标拖拽标题栏移动窗口的功能. 只是,当你不满意java的JFrame样式,隐藏了标题栏和边框,又或者干脆直接使用JWindow,那你又该怎么实现鼠标拖 ...

  5. qml鼠标拖动_Arcgis for qml - 鼠标拖拽移动

    以实现鼠标拖拽文本图层为例 目的是利用鼠标进行拖拽. 实现两种模式,一种是屏幕上的拖拽,第二种是地图上图层的挪动. 屏幕上的拖拽其实跟ArcGIS没有联系,用qml就能写,但是地图图层上的挪动,就需要 ...

  6. Qt可拖拽排序表格(解决滚动条不兼容问题,类似QQ好友分组排序)

    原版链接 https://blog.csdn.net/dpsying/article/details/77206127 Qt可拖拽排序表格(类似QQ好友分组排序) 感谢博主无私分享 修改后,解决了滚动 ...

  7. 理解事件捕获。在限制范围内拖拽div+吸附+事件捕获

    一.实现的效果是在限制范围内拖拽div+吸附+事件捕获. 这里需要理解的是事件捕获,这个事件捕获也是为了兼容div在拖拽过程中,文本不被选中这个问题. 如此良辰美景,拖拽也可以很洒脱哈.先看看图, 二 ...

  8. java鼠标左键按下后拖动实现多选_鼠标拖拽多选功能

    鼠标拖拽多选功能 *{ box-sizing:border-box; } ul{ width:500px; height:auto; margin:0; padding:20px; font-size ...

  9. html5的鼠标拖拽

    鼠标拖拽 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8 ...

最新文章

  1. 数据中台解决的三大问题
  2. django 解决cors问题
  3. Devstack 配置文件说明手册
  4. 解决无法将类型为“System.Web.UI.WebControls.HiddenField”的对象强制转换为类型的错误...
  5. folder ground 文件访问
  6. ML之DT之CART:分类与回归树CART算法的简介、应用、经典案例之详细攻略
  7. 009 自动打怪功能的设计和实现
  8. 中国广电设备行业十四五运营模式与投资机遇研究报告2022版
  9. win10系统调用架构分析
  10. 前端学习(1267):axios的post传参
  11. Python3 离线安装第三方包
  12. vim打造成C++的IDE
  13. 软件测试颗粒度,测试用例粒度粗细的划分
  14. 智能优化算法(源码)-樽海鞘优化算法(Salp Swarm Algorithm,SSA)
  15. 100 行 js 代码下载抖音无水印视频
  16. 网站页面设计的原则有哪些呢?
  17. Jruby On Rails 的安装及部署实践
  18. windows 远程桌面客户端
  19. C++实现七参数转换法(布尔莎模型)
  20. Android中startActivities的准确用法

热门文章

  1. 用成员函数和友元函数重载运算符
  2. Java NIO(三)通道Channel
  3. 什么是网站架构(转)
  4. SUST OJ 1675: Fehead的项目(单调栈)
  5. Linux安装云原生网关Kong/KongA
  6. 面试回答,JVM内存模型/内存空间:运行时数据区
  7. 计算机基础知识集体备课,计算机集体备课(三)
  8. SQL必知必会笔记(上)
  9. 移动电影院发布2.0版本,多功能多种体验
  10. 【Office】Word中的标尺,如何以厘米为单位显示