QT 事件系统之QMouseEvent鼠标事件
概述
在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鼠标事件相关推荐
- qt linux 鼠标事件,QT学习笔记5:QMouseEvent鼠标事件简介
一.QMouseEvent的详细描述 首先请注意,Qt中的QMouseEvent一般只涉及鼠标左键或右键的单击.释放等操作,而对鼠标滚轮的响应则通过QWheeEvent来处理. QMouseEvent ...
- QMouseEvent鼠标事件简介
一.QMouseEvent的详细描述 首先请注意,Qt中的QMouseEvent一般只涉及鼠标左键或右键的单击.释放等操作,而对鼠标滚轮的响应则通过QWheeEvent来处理. QMouseEvent ...
- QT界面:重写鼠标事件/实时显示Label中鼠标位置
为了在QT UI界面的状态栏实时显示鼠标在Label中的位置,需要重写鼠标事件MouseMoveEvent(). 但是MouseMoveEvent为了不过多消耗资源,默认需要鼠标按下捕捉到.因此需要在 ...
- 【转】QMouseEvent鼠标事件简介
首先请注意, Qt中的QMouseEvent一般只涉及鼠标左键或右键的单击.释放等操作 ,而对 鼠标滚轮的响应则通过QWheeEvent来处理 . 以下内容来自QMouseEvent的API文档. 1 ...
- qt on android 桌面鼠标事件,Qt on Android 不能自动创建Qt套件的问题的解决
在按照<Qt on Android核心编程>在搭建Qt on Android开发环境的时,虽然完全按书上的做法做了好几遍,但是在Qt Creator配置Android的Qt套件时,看到Qt ...
- qt on android 桌面鼠标事件,關於Qt on Android,程序安裝到手機,界面只占到一小部分。...
環境為Qt5.7. 手機界面: PC界面: 程序如下,手機為三星I9300,rom為CM13,6.0系統. 想知道如何占滿屏幕 main.cpp #include #include #include ...
- QT mouseMoveEvent事件(qmainwindow内追踪鼠标事件事件)
最近用Qt软件界面,需要用到mouseMoveEvent,研究了下,发现些问题,分享一下. 在Qt中要捕捉鼠标移动事件需要重写MouseMoveEvent,但是MouseMoveEvent为了不太耗资 ...
- 2、Qt Project之鼠标事件监控
鼠标事件监控: 对于鼠标时间监控的相关操作,我们在简历工程的时候需要选择的是QWidget基类,不选择QMainWindow基类,如下所示: Base class:QWidget Step1:我们首先 ...
- 【Qt教程】3.1 - Qt5 event事件、Label控件的鼠标事件捕获
1. event简介 事件(event)是由系统或者Qt本身在不同的时刻发出的.当用户按下鼠标.敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件.一些事件在对用户操作做出响应时发出,如键 ...
最新文章
- 解决scrollView像素自动下移的办法
- ubuntu16安装anaconda显示没有文件或那个目录
- GMQ稳定币为区块链资产在金融市场的进一步应用打开了一扇大门
- [转载]答《漫话ID》中的疑问:UniqueID和ClientID的来源
- 沃尔玛招聘.NET软件工程师
- 关于负载均衡的一切:总结与思考
- C# - JSON详解
- python编程高手教程_写给编程高手的Python教程(01) 数据结构
- java自定义事件案例_Java Custom Exception Example(Java自定义异常案例)
- 人列计算机 (节选自《三体》作者:刘慈欣)
- 【Kernel Method】Kernel Method核方法介绍
- SPSS:因子分析步骤
- 【Unity3D插件】DoTween插件(三)
- 台风怎么看内存颗粒_一文全懂!内存条超频、稳定怎么看?——从入门到精通...
- 小学计算机面试说课稿,小学信息技术面试说课稿(模板)
- void函数使用return
- 直角三角形的两个夹角度数计算(java)
- AVC编码中的规格 :High、Baseline、Main什么意思?还有High@L3.0、High@L4.0、High@L5.1等
- Unity基础-灯光
- 【我不熟悉的css】css使用background-clip,实现圆角彩色的边框,文字渐变色