Qt鼠标拖拽窗口移动事件
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鼠标拖拽窗口移动事件相关推荐
- Qt 实现鼠标拖拽窗口移动
在Qt中实现鼠标拖动窗口可以分为三个步骤来做: 鼠标在窗口按下左键时,获取到当前鼠标的位置,并且计算offset,即鼠标当前位置减去窗口左上角坐标; 鼠标移动时,因为是单击鼠标,所以会一直执行第一步, ...
- 弹出框的鼠标拖拽事件
几个与定位有关的概念: js: clientX/clientY属性:获得事件发生时鼠标指针在视口中的水平和垂直坐标. screenX/screenY属性:获取鼠标事件发生时鼠标光标相对于整个电脑屏幕的 ...
- JavaFX鼠标拖拽事件
一.节点原拖拽事件 //鼠标拖拽进入node node.setOnMouseDragEntered(event->{//do something });//鼠标拖拽退出node node.set ...
- java 鼠标拖拽事件_Java实现鼠标拖拽移动界面组件
默认的,Frame或者JFrame自身已经实现了鼠标拖拽标题栏移动窗口的功能. 只是,当你不满意java的JFrame样式,隐藏了标题栏和边框,又或者干脆直接使用JWindow,那你又该怎么实现鼠标拖 ...
- qml鼠标拖动_Arcgis for qml - 鼠标拖拽移动
以实现鼠标拖拽文本图层为例 目的是利用鼠标进行拖拽. 实现两种模式,一种是屏幕上的拖拽,第二种是地图上图层的挪动. 屏幕上的拖拽其实跟ArcGIS没有联系,用qml就能写,但是地图图层上的挪动,就需要 ...
- Qt可拖拽排序表格(解决滚动条不兼容问题,类似QQ好友分组排序)
原版链接 https://blog.csdn.net/dpsying/article/details/77206127 Qt可拖拽排序表格(类似QQ好友分组排序) 感谢博主无私分享 修改后,解决了滚动 ...
- 理解事件捕获。在限制范围内拖拽div+吸附+事件捕获
一.实现的效果是在限制范围内拖拽div+吸附+事件捕获. 这里需要理解的是事件捕获,这个事件捕获也是为了兼容div在拖拽过程中,文本不被选中这个问题. 如此良辰美景,拖拽也可以很洒脱哈.先看看图, 二 ...
- java鼠标左键按下后拖动实现多选_鼠标拖拽多选功能
鼠标拖拽多选功能 *{ box-sizing:border-box; } ul{ width:500px; height:auto; margin:0; padding:20px; font-size ...
- html5的鼠标拖拽
鼠标拖拽 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8 ...
最新文章
- 数据中台解决的三大问题
- django 解决cors问题
- Devstack 配置文件说明手册
- 解决无法将类型为“System.Web.UI.WebControls.HiddenField”的对象强制转换为类型的错误...
- folder ground 文件访问
- ML之DT之CART:分类与回归树CART算法的简介、应用、经典案例之详细攻略
- 009 自动打怪功能的设计和实现
- 中国广电设备行业十四五运营模式与投资机遇研究报告2022版
- win10系统调用架构分析
- 前端学习(1267):axios的post传参
- Python3 离线安装第三方包
- vim打造成C++的IDE
- 软件测试颗粒度,测试用例粒度粗细的划分
- 智能优化算法(源码)-樽海鞘优化算法(Salp Swarm Algorithm,SSA)
- 100 行 js 代码下载抖音无水印视频
- 网站页面设计的原则有哪些呢?
- Jruby On Rails 的安装及部署实践
- windows 远程桌面客户端
- C++实现七参数转换法(布尔莎模型)
- Android中startActivities的准确用法