Qt QWidget实现手势缩放和平移(二)
来源:互联网 发布:win764位精简优化版 编辑:程序博客网 时间:2024/05/16 08:18
上一篇文章中讲到了QWidget实现手势缩放和平移,通过QGestureEvent来捕捉手势操作,但是这种方式不一定能通用,比如像教学用的电子白板上,是红外触控感应,并不能通过QGestureEvent来识别手势事件,那么,只能通过第二种比较通用的方式来解决该问题了。
通用的方式就是通过touchEvent事件来捕捉触控事件,然后通过识别两个触控点的移动位置来计算要缩放的比例,这里需要实现的是两个手指放大和和缩小,然后单指移动图片的功能,该方式只要在支持多点触控的设备上就能实现手势缩放。那么,这里只需要在上一篇文章的代码基础上修改event事件实现就好了,在event事件中捕捉touchEvent事件,其余代码不变。
关键代码如下:
bool CProjectionPicture::event(QEvent *event){// if (event->type() == QEvent::Gesture)// return gestureEvent(static_cast<QGestureEvent*>(event)); switch (event->type()) { case QEvent::TouchBegin: case QEvent::TouchUpdate: case QEvent::TouchEnd: { qDebug() <<"CProjectionPicture::event"; QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event); QList<QTouchEvent::TouchPoint> touchPoints = touchEvent->touchPoints(); if (touchPoints.count() == 2) { m_bIsTwoPoint = true;//两指时不让移动 const QTouchEvent::TouchPoint &touchPoint0 = touchPoints.first(); const QTouchEvent::TouchPoint &touchPoint1 = touchPoints.last(); qreal currentScaleFactor = QLineF(touchPoint0.pos(), touchPoint1.pos()).length() / QLineF(touchPoint0.startPos(), touchPoint1.startPos()).length(); if (touchEvent->touchPointStates() & Qt::TouchPointReleased) { scaleFactor *= currentScaleFactor; } currentStepScaleFactor = currentScaleFactor; update(); } else if(touchPoints.count() == 1){ m_bIsTwoPoint = false; } return true; } default: break; } return QWidget::event(event);}
这里还包含了m_bIsTwoPoint变量,该变量是用来控制区分当前是单点触控还是两点触控,用于辨别在单点时移动,两点时放大。在mouseMoveEvent中区分,代码比较简单,就不贴出来了 。
另外,由于需要捕捉touch事件,需要设置属性
setAttribute(Qt::WA_AcceptTouchEvents);
0 0
- Qt QWidget实现手势缩放和平移(二)
- Qt QWidget实现手势缩放和平移(一)
- 手势 平移 缩放 旋转
- iOS 利用平移缩放旋转手势对view实现对应的平移缩放旋转效果(一)
- Unity3D 场景平移、缩放(二)
- 自学QT之图片操作(缩放、平移、扭曲和旋转等)
- Android中侧滑菜单效果实现(主界面和菜单界面实现平移、缩放、滚动动画)
- 七、Sketchup用ruby进行二次开发--利用Transformation实现Move工具(平移、旋转和缩放)
- Mapxtreme Java 地图缩放,平移操作的原理和实现
- SpriteKit 实现 COC 游戏场景的平移和缩放
- OpenGL绘制简单场景,实现旋转缩放平移和灯光效果
- Android中利用Matrix实现图片平移、缩放和旋转
- Android 手势检测实战 打造支持缩放平移的图片预览效果(上)
- Android 手势检测实战 打造支持缩放平移的图片预览效果(下)
- Android 手势检测实战 打造支持缩放平移的图片预览效果(下)
- Android 手势检测实战 打造支持缩放平移的图片预览效果(上)
- Android 手势检测实战 打造支持缩放平移的图片预览效果(下)
- Android 手势检测实战 打造支持缩放平移的图片预览效果(上)
- 给 Android 开发者的 RxJava 详解
- 关于npm的使用注意事项
- Android Design Support Library - TabLayout的用法
- 关于泛型的一些问题
- <xliff:g>标签介绍:
- Qt QWidget实现手势缩放和平移(二)
- 每个开发人员应该知道的20个关于PHP的有趣的事实
- Python中PyQuery库的使用总结
- 文章标题
- 微信小程序注册开发教程(入门)
- Java I/O 总结
- Java异常
- Centos 7 intsall finished
- Python list操作用法总结