文章目录

  • 1 QMouseEvent
    • 1.1 特别说明
  • 2 通过QMouseEvent事件实现窗口移动

1 QMouseEvent

1.1 特别说明

QMouseEvent没啥要注意的,就是对于mouseMoveEvent,默认情况下,触发事件需要点击一下,才能触发。可设置为自动触发:setMouseTracking(true);


2 通过QMouseEvent事件实现窗口移动

实现起来还是比较简单的。

头文件:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>namespace Ui {class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;protected://拖拽窗口,重写三个虚函数void mousePressEvent(QMouseEvent *event);void mouseMoveEvent(QMouseEvent *event);void mouseReleaseEvent(QMouseEvent *event);private:bool        m_bDrag;QPoint      mouseStartPoint;QPoint      windowTopLeftPoint;
};#endif // WIDGET_H

实现文件:

#include "widget.h"
#include "ui_widget.h"
#include <QMouseEvent>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget),m_bDrag(false)
{ui->setupUi(this);setWindowTitle("窗口拖拽移动");setFixedSize(640, 480);}Widget::~Widget()
{delete ui;
}//拖拽操作
void Widget::mousePressEvent(QMouseEvent *event)
{if(event->button() == Qt::LeftButton){m_bDrag = true;//获得鼠标的初始位置mouseStartPoint = event->globalPos();//mouseStartPoint = event->pos();//获得窗口的初始位置windowTopLeftPoint = this->frameGeometry().topLeft();}
}void Widget::mouseMoveEvent(QMouseEvent *event)
{if(m_bDrag)            {//获得鼠标移动的距离//QPoint distance = event->pos() - mouseStartPoint;QPoint distance = event->globalPos() - mouseStartPoint;//改变窗口的位置this->move(windowTopLeftPoint + distance);/*注意:一般定位鼠标坐标使用的是event->pos()和event->globalPos()两个函数,event->pos()鼠标相对于当前活动窗口左上角的位置event->globalPos()获取的鼠标位置是鼠标偏离电脑屏幕左上角(x=0,y=0)的位置;一般不采用前者,使用前者,拖动准确性较低且会产生抖动。*/}
}void Widget::mouseReleaseEvent(QMouseEvent *event)
{if(event->button() == Qt::LeftButton){m_bDrag = false;}
}

需要特别注意:在鼠标移动过程中必须通过buttons()来判断是哪个按键按下。因为button函数:

QMouseEvent相关推荐

  1. QMouseEvent鼠标事件简介

    一.QMouseEvent的详细描述 首先请注意,Qt中的QMouseEvent一般只涉及鼠标左键或右键的单击.释放等操作,而对鼠标滚轮的响应则通过QWheeEvent来处理. QMouseEvent ...

  2. qt linux 鼠标事件,QT学习笔记5:QMouseEvent鼠标事件简介

    一.QMouseEvent的详细描述 首先请注意,Qt中的QMouseEvent一般只涉及鼠标左键或右键的单击.释放等操作,而对鼠标滚轮的响应则通过QWheeEvent来处理. QMouseEvent ...

  3. QMouseEvent 的坐标__Win

    1. QMouseEvent.x() 和 QMouseEvent.y() 是窗口里面的坐标,相当于 Windows API 里面的 ClientX和ClientY . 2. QMouseEvent.G ...

  4. paintevent参数_Qt学习: QPaintEvent和QMouseEvent的简单程序示例

    QMouseEvent下可以被重写的虚函数: 1.void mousePressEvent(QMouseEvent *event); //鼠标键被按下的事件. 2.void mouseReleaseE ...

  5. QT 事件系统之QMouseEvent鼠标事件

    概述 在Qt中,鼠标事件被封装成.QMouseEvent对象,QMouseEvent中包含一些参数,用描述鼠标事件. 在QT中,鼠标事件包含:鼠标按键按下,鼠标按键释放,鼠标双击事件,鼠标移动事件. ...

  6. 鼠标事件:QMouseEvent

    #include<QMouseEvent> 鼠标无论是点击,移动,双击,松开都由鼠标的左右键区别而有区别,所以,严谨的来使用就是如mousePressEvent一样来通过按下的键来区别对待 ...

  7. Qt中mouseMoveEvent(QmouseEvent *event)使用探讨

    Qt中mouseMoveEvent(QmouseEvent *event)使用探讨 在学习网络教程过程中,尝试使用Qpainter制作一个涂鸦板,需要使用QmouseEvent ,按照教程,涂鸦板不能 ...

  8. Qt鼠标点击不响应QMouseEvent事件的解决办法

    最近在写程序在和同事合完代码后发现一个问题,项目是使用qt开发一个程序,有一个功能是要实现地图的标记功能,我需要在一个label控件上显示地图,然后再选中标记按钮后点击地图,会在鼠标点击的位置放置一个 ...

  9. 【转】QMouseEvent鼠标事件简介

    首先请注意, Qt中的QMouseEvent一般只涉及鼠标左键或右键的单击.释放等操作 ,而对 鼠标滚轮的响应则通过QWheeEvent来处理 . 以下内容来自QMouseEvent的API文档. 1 ...

最新文章

  1. 视频互动直播软件开发中的连麦问题分析
  2. C#命名规范 C#控件的缩写大全
  3. Highmaps网页图表教程之图表配置项结构与商业授权
  4. (转载)VS2010/MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)...
  5. 多目标优化算法_【实验室论文】基于多种群协同演化的约束多目标优化算法
  6. C/C++如何传递二维数组?
  7. Socket,非阻塞,fcntl
  8. Python这门语言为什么适合初学者?88.7%的小白听了会感谢选择它
  9. 如何做到免驱打印_道滘镇彩色打印机租赁公司,长安镇办公室绿植安装
  10. 从vivo 大规模特征存储实践中学点经验
  11. 一个 TypeScript keyof 泛型用法
  12. php gmssl,GmSSL是什么
  13. QQ浏览器,正式推出,9.0版本又多些好东西!
  14. 初次接触面元法对螺旋桨的性能预报,发现之前很多学者都是用fortran进行编程进行性能预报,为什么不用matlab呢,两者的差异在哪里,建议初学者用这哪个软件呢
  15. union和union all哪个效率高
  16. 在Redhat9上安装Oracle 9.2
  17. TreeMap集合怎样依照Value进行排序
  18. 关于vs中出现lnk2019和lnk1120错误
  19. 移动端SEO的一些疑问
  20. 计算机理论导引 期末,计算机理论导引实验报告_CFG是P成员

热门文章

  1. 【STM32】按键检测实验主要程序代码分析
  2. 第五章 有限脉冲响应滤波器(ba,我终于懂FIR滤波器了)
  3. html点击区域,求助HTML+CSS可以点击区域外关闭实现。
  4. 开源作品ThinkJDBC—一行代码搞定数据库操作
  5. React16.2的fiber架构
  6. 【下载】RSA1024及RSA2048加密算法漏洞CVE-2017-7526 问题出在GnuPG加密库
  7. C#操作符??和?:
  8. magent实现memcached集群的一个问题
  9. IOS开发网络第一天之06线程之间的通信
  10. 最短路径问题-Dijkstra