概述

在Qt中,鼠标事件被封装成.QMouseEvent对象,QMouseEvent中包含一些参数,用描述鼠标事件。

在QT中,鼠标事件包含:鼠标按键按下,鼠标按键释放,鼠标双击事件,鼠标移动事件。
分别由下面的event handle(事件处理器,实际上就是一些可override的函数)r来处理:

virtual void mousePressEvent(QMouseEvent *event);
virtual void mouseReleaseEvent(QMouseEvent *event);
virtual void mouseDoubleClickEvent(QMouseEvent *event);
virtual void mouseMoveEvent(QMouseEvent *event);

这些函数是QWidget的virtual函数,在Qt中称为event handler.如果你想在QWidget中自定义行为以响应相关事件,请override这些函数。

详细描述

当在Widgets内部 按下 或 释放 鼠标按键,移动鼠标光标,或者双击鼠标时,会产生鼠标事件。

除非使用QWidget :: setMouseTracking()启用鼠标跟踪,否则只有在按下鼠标按钮时才会发生鼠标移动事件。

当在窗口小部件中按下鼠标按钮时,Qt会自动抓取鼠标; 小部件将继续接收鼠标事件,直到释放最后一个鼠标按钮。

鼠标事件包含一个特殊的接受标志,指示接收者是否想要该事件。如果窗口小部件未处理鼠标事件,则应调用ignore()。鼠标事件沿父窗口小部件链向上传播,直到窗口小部件使用accept()接受它,或者事件过滤器消耗它。

鼠标事件属于冒泡事件,鼠标事件会一直随着其父链一直路由下去,知道有widget接受它,或者有事件过滤器消耗它。

注意:如果鼠标事件被路由到包含Qt:: WA_NoMousePropagation窗口属性的窗口小部件,该鼠标事件不会进一步沿着父控件链路由。

修饰键(Modifier)的状态可以通过QInputEvent::modifiers()函数找到。

函数pos(),x()和y()给出了鼠标光标在接收鼠标事件的窗口小部件中的位置,这是局部坐标位置。如果要使用鼠标事件(通常是鼠标光标移动事件)来移动窗口小部件,请使用globalPos()返回的全局位置以避免抖动。

如果你想在QWidget接收到的鼠标事件中添加自定义行为,请重新实现QWidget的 event handler:

virtual void mousePressEvent(QMouseEvent *event);
virtual void mouseReleaseEvent(QMouseEvent *event);
virtual void mouseDoubleClickEvent(QMouseEvent *event);
virtual void mouseMoveEvent(QMouseEvent *event);

属性

protected:QPointF l, w, s;Qt::MouseButton b;Qt::MouseButtons mouseState;int caps;QVector2D velocity;
  • l – 全写local
    表示的是当鼠标事件发生时,鼠标光标在接收该鼠标事件的窗口小部件中位置,局部坐标。可以通过LocalPos(),x(),y()方法获取。

  • w – 全写window
    表示的是当鼠标事件发生时,鼠标光标在接收该鼠标事件的窗口中位置(父亲widget?还是最顶层widget?)。可以通过windowPos()。

  • s – Screen
    表示的是当鼠标事件发生时,鼠标光标在屏幕坐标系统中的位置。可以通过globalPos()方法获取。

  • b – button
    产生鼠标事件的鼠标按键:鼠标左键,鼠标右键等

  • mouseState
    鼠标事件发生时按钮状态。按钮状态是使用OR运算符的Qt :: LeftButton,Qt :: RightButton,Qt :: MidButton的组合。对于鼠标移动事件,这是按下的所有按钮。对于鼠标按下和双击事件,这包括导致事件的按钮。对于鼠标释放事件,这将排除导致事件的按钮。

相关枚举类型

MouseButton

鼠标按键类型:鼠标左键,右键,中键等

enum MouseButton {NoButton         = 0x00000000,LeftButton       = 0x00000001,RightButton      = 0x00000002,MidButton        = 0x00000004, // ### Qt 6: remove meMiddleButton     = MidButton,BackButton       = 0x00000008,XButton1         = BackButton,ExtraButton1     = XButton1,ForwardButton    = 0x00000010,XButton2         = ForwardButton,ExtraButton2     = ForwardButton,TaskButton       = 0x00000020,ExtraButton3     = TaskButton,...

MouseEventSource

描述鼠标事件的来源,常用于判断鼠标事件是否是来自于其他设备(比如触摸屏)的人造鼠标事件。比如将触摸事件模拟成鼠标事件

enum MouseEventSource {MouseEventNotSynthesized,MouseEventSynthesizedBySystem,MouseEventSynthesizedByQt,MouseEventSynthesizedByApplication};

MouseEventFlag

enum MouseEventFlag {MouseEventCreatedDoubleClick = 0x01,//表示Qt已从此事件创建了MouseButtonDblClick事件。该标志在导致MouseButtonPress中设置,而不是在生成的MouseButtonDblClick中MouseEventFlagMask = 0xFF};

QT 事件系统之QMouseEvent鼠标事件相关推荐

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

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

  2. QMouseEvent鼠标事件简介

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

  3. QT界面:重写鼠标事件/实时显示Label中鼠标位置

    为了在QT UI界面的状态栏实时显示鼠标在Label中的位置,需要重写鼠标事件MouseMoveEvent(). 但是MouseMoveEvent为了不过多消耗资源,默认需要鼠标按下捕捉到.因此需要在 ...

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

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

  5. qt on android 桌面鼠标事件,Qt on Android 不能自动创建Qt套件的问题的解决

    在按照<Qt on Android核心编程>在搭建Qt on Android开发环境的时,虽然完全按书上的做法做了好几遍,但是在Qt Creator配置Android的Qt套件时,看到Qt ...

  6. qt on android 桌面鼠标事件,關於Qt on Android,程序安裝到手機,界面只占到一小部分。...

    環境為Qt5.7. 手機界面: PC界面: 程序如下,手機為三星I9300,rom為CM13,6.0系統. 想知道如何占滿屏幕 main.cpp #include #include #include ...

  7. QT mouseMoveEvent事件(qmainwindow内追踪鼠标事件事件)

    最近用Qt软件界面,需要用到mouseMoveEvent,研究了下,发现些问题,分享一下. 在Qt中要捕捉鼠标移动事件需要重写MouseMoveEvent,但是MouseMoveEvent为了不太耗资 ...

  8. 2、Qt Project之鼠标事件监控

    鼠标事件监控: 对于鼠标时间监控的相关操作,我们在简历工程的时候需要选择的是QWidget基类,不选择QMainWindow基类,如下所示: Base class:QWidget Step1:我们首先 ...

  9. 【Qt教程】3.1 - Qt5 event事件、Label控件的鼠标事件捕获

    1. event简介 事件(event)是由系统或者Qt本身在不同的时刻发出的.当用户按下鼠标.敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件.一些事件在对用户操作做出响应时发出,如键 ...

最新文章

  1. 解决scrollView像素自动下移的办法
  2. ubuntu16安装anaconda显示没有文件或那个目录
  3. GMQ稳定币为区块链资产在金融市场的进一步应用打开了一扇大门
  4. [转载]答《漫话ID》中的疑问:UniqueID和ClientID的来源
  5. 沃尔玛招聘.NET软件工程师
  6. 关于负载均衡的一切:总结与思考
  7. C# - JSON详解
  8. python编程高手教程_写给编程高手的Python教程(01) 数据结构
  9. java自定义事件案例_Java Custom Exception Example(Java自定义异常案例)
  10. 人列计算机 (节选自《三体》作者:刘慈欣)
  11. 【Kernel Method】Kernel Method核方法介绍
  12. SPSS:因子分析步骤
  13. 【Unity3D插件】DoTween插件(三)
  14. 台风怎么看内存颗粒_一文全懂!内存条超频、稳定怎么看?——从入门到精通...
  15. 小学计算机面试说课稿,小学信息技术面试说课稿(模板)
  16. void函数使用return
  17. 直角三角形的两个夹角度数计算(java)
  18. AVC编码中的规格 :High、Baseline、Main什么意思?还有High@L3.0、High@L4.0、High@L5.1等
  19. Unity基础-灯光
  20. 【我不熟悉的css】css使用background-clip,实现圆角彩色的边框,文字渐变色

热门文章

  1. Openstack中为虚拟机挂载ISO镜像
  2. Excel基础24讲
  3. Hadoop能做什么
  4. kurento API解读
  5. 震惊!!!史上最强 python 智能问答系统现世
  6. 全国285个地级市平均房价数据(2000-2021年)
  7. IDEA2022版教程下(快键键总结、Debug断点调试总结、22版本idea创建各种工程、关联数据库、常用插件)
  8. 3D打印与3D扫描的未来在哪里
  9. 勒索软件Snatch攻击原理分析
  10. 亚德客真空表DPSN基本参数设置