QT:触摸屏支持手指触摸,增加touch事件touchevent,记录前后touch坐标并处理

  • 1、手指触摸事件当做鼠标事件去响应的可行性
  • 2、触摸事件touchEvent的添加
  • 3、重写touch事件

1、手指触摸事件当做鼠标事件去响应的可行性

目前所见,有的QT关于触摸屏触摸事件的处理,是把手指点击屏幕的行为,作为鼠标事件去处理的,这样的情况在大部分场景是可以“应付应付”的,但是如果在如下场景(可能更多)这样的处理显然就不满足了。

比如如下场景:【手指点击空白处退出当前的窗口】

是鼠标点击的话,假设没有移动,MouseButtonPress 和 MouseButtonRelease记录的坐标point其实是同一个点,这样的判断是没有问题的。

可是,如果现在手指点击,手指和触摸屏的接触点可就不一样了,手指接触屏幕上去就不是一个点了。这个场景下,就需要touchevent事件,去处理手指触摸事件了。

2、触摸事件touchEvent的添加

首先,让在需要加touch事件的控件能够接收touch;

    this->setAttribute(Qt::WA_AcceptTouchEvents);

随后,事件过滤器增加如下三个事件,就好了,一般都是重写一下

TouchBegin   // 开始触摸
TouchUpdate  // 状态更新,不如手指滑动之类的
TouchEnd    //  手指松开,结束触摸

3、重写touch事件

头文件如下:

private:bool touchBeginEventProcess(QEvent *event);bool touchUpdateEventProcess(QEvent *event);bool touchEndEventProcess(QEvent *event);

函数,事件过滤器

bool WidgetTouch::eventFilter(QObject *object, QEvent *event)
{if (object == this) {switch (event->type()){case QEvent::TouchBegin:return touchBeginEventProcess(event);case QEvent::TouchUpdate:return touchUpdateEventProcess(event);case QEvent::TouchEnd:return touchEndEventProcess(event);
...............    // 剩下事件的处理~
..........
.......
}

bool WidgetTouch::touchBeginEventProcess(QEvent *event)
{QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event);QList<QTouchEvent::TouchPoint> touchStartPoints = touchEvent->touchPoints();startPoint = touchStartPoints.at(0).screenPos().toPoint();  //  touch开始触控的点坐标touchEvent->accept();return true;
}bool WidgetTouch::touchUpdateEventProcess(QEvent *event)
{QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event);QList<QTouchEvent::TouchPoint> touchUpdatePoints = touchEvent->touchPoints();//  设置单指触控,还是多指触控if (TOUCH_ONE_POINT == touchUpdatePoints.count()) {  //  假设此时场景,手指滑动了QPoint nowPoint = touchUpdatePoints.at(0).screenPos().toPoint();  // screenPos 当前坐标的位置QPoint lastPoint = touchUpdatePoints.at(0).lastScreenPos().toPoint();  //  上一次坐标的位置endPoint = nowPoint;  //  手指滑动后,记录一下最后松开的 坐标位置}return true;
}bool WidgetTouch::touchEndEventProcess(QEvent *event)
{QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event);//  这里或者 touchUpdateEventProcess 当中去处理,根据初始和结束坐标,做其它处理/* 比如上述touch空白处退出窗口的需求,根据前后坐标,满足设定的阈值(10 - 20 像素就好),就释放退出信号*/touchEvent->accept();return true;
}

其它的处理,内容,在此时就可以使用 F1 去查看官方帮助文档了,作用和解释都很详细

以上,就是增加touch事件touchevent的大概逻辑框架了。
如果更复杂的事件,就建议去使用手势事件-QGesture了。

QT:触摸屏支持手指触摸,增加touch事件touchevent,记录前后touch坐标并处理相关推荐

  1. 移动端事件--touch事件的分类、touch事件的event对象、 其他触摸事件

    一.touch事件的分类 1.1 触摸事件(touch) .box {width: 150px;height: 150px;background-color: red;margin: 20px aut ...

  2. QT使用之 手指滑动 | 物理惯性继续滑动动画的实现,根据不同速度实现不同动画效果

    2021/03/26: 参考如下:有惯性,有回顶效果:使用手势 QT使用之 :手指滑动后物理惯性滑动-动画的实现,根据不同速度有不同的效果 一. 前言 首先,因为是使用手指滑动,所以控件要求能够支持 ...

  3. safari里的touch事件解析

    为什么80%的码农都做不了架构师?>>>    <!DOCTYPE html> <html><head><title>测试touch& ...

  4. 搞定移动端一(移动端 touch 事件,TouchEvent 对象)

    移动端事件 1.目标 掌握移动端 touch 事件使用 掌握 touch 事件和 mouse 事件的区别 掌握 touchEvent 实现移动端幻灯片 2.移动端touch事件 touchstart ...

  5. 深入cocos2d-x中的touch事件

    深入cocos2d-x中的touch事件 在文章cocos2d-x中处理touch事件中简单讨论过怎样处理touch事件, 那么今天来深入了解下cocos2d-x中是怎样分发touch事件的. 我们最 ...

  6. 手持设备点击响应速度,鼠标事件与touch事件的那些事

    前言 现在一直在做移动端的开发,这次将单页应用的网页内嵌入了app,于是老大反映了一个问题: app应用点击响应慢! 我开始不以为然,于是拿着网页版的试了试,好像确实有一定延迟,于是开始了研究,最后选 ...

  7. CCLayer中Touch事件(Standard Touch Delegate Targeted Touch Delegate)

    http://blog.csdn.net/davintanger/article/details/6836143 Cocos2d 开发中提供了两种touch处理方式,Standard Touch De ...

  8. Cocos Creator Touch事件与Unity3D Touch事件

    Cocos Creator Touch 事件 cc.Node 有一套完整的事件监听和分发机制.在这套机制之上,提供了一些基础的节点相关的系统事件.因此,在cocos creator中touch事件是与 ...

  9. 简易封装手机浏览器touch事件

    做手机开发时候,简单想用一些动作,如touchLeft,touchRight等, 使用其他库文件就要加载很多不必要的东西,流量的浪费 今天简单写了封装touch的库,简单的监听一些逻辑 onTouch ...

最新文章

  1. python批量命名变量_python变量命名的7条建议
  2. SAP Fiori Launchpad Contact Support的按钮启用逻辑
  3. AJAX初识(原生JS版AJAX和Jquery版AJAX)
  4. 新手必看,物联网卡常见的三大问题!
  5. 数据平台作业调度系统详解-理论篇
  6. USB转NRF24L01模块 带UI上位机
  7. 运维软件推荐(附带软件百度网盘分享)
  8. VS2010 专业版本安装步骤
  9. java 右对齐_字符串对齐器(左对齐、居中、右对齐)
  10. 怎样免费设置QQ空间背景音乐
  11. 关于符号Symbol第二篇
  12. easy connect显示‘网络请求异常请稍后重试’
  13. Ant Design Vue 动态路由
  14. Vue--keep-alive--详解
  15. 那些年啊,那些事——一个程序员的奋斗史 ——53
  16. Idea报错[Cannot access com.xxx] 的 [解决办法]
  17. 1分钟链圈 | 马化腾:大湾区可挖掘更多的区块链应用场景,比如区块链电子发票...
  18. 春节静态HTML网页作业模板 传统节日文化网站设计作品 静态学生网页设计作业简单网页制作
  19. 中国古诗文Python爬虫JJJ
  20. php 安装SG11扩展教程

热门文章

  1. java元婴期(27)----java进阶(springmvc(1)---springmvc框架入门程序(上)(不基于注解开发))
  2. buu rsarsa
  3. irq domain介绍和代码导读
  4. [armv9]-ARM最新架构为memcpy/memset底层的实现提供新的指令
  5. windows平台下安装Mysql8.0.20版本
  6. Celery基本介绍
  7. PWN学习总结(四)—— BROP
  8. Windows保护模式学习笔记(十二)—— 控制寄存器
  9. Ubuntu 环境中多线程下载工具Axel的安装与使用
  10. bash读取txt文件, 并在浏览器中以表格形式输出