本应用于基于QGraphicsView框架,实现多点触摸. 工程仅仅演示了多点触摸绘图,源自我前段时间一款基于Qt的绘图软件.

工程结构:

kmp.h 定义了枚举

slide.h/cpp 定义了派生于QGraphicsScene的slide类,实现绘制的主要功能

widget.h/cpp 定义了派生于QGraphicsView的widget类,多点了多点触摸部分.

kmpinkelement.h/cpp 定义了派生于QGraphicsPathItem的笔迹对象.

应用实现了抒写,没有实现类似其他工具:橡皮擦,选择工具,漫游工具等

QGraphicsView的多点触摸在viewportEvent事件,处理TouchBegin/touchUpdate/TouchEnd事件,在处理touch事件中需要通过判断每个点的状态,同时根据每个点的ID来实现多点笔迹的管理.

bool Widget::viewportEvent(QEvent *event){
// 处理touch事件
QEvent::Type evType = event->type();
if(evType==QEvent::TouchBegin || evType == QEvent::TouchUpdate || evType == QEvent::TouchEnd )
{
QTouchEvent* touchEvent = static_cast<QTouchEvent*>(event);
QList<QTouchEvent::TouchPoint> touchPoints = touchEvent->touchPoints(); foreach( const QTouchEvent::TouchPoint tp , touchPoints ){
//不考虑pad
QPoint touchPos = QPoint( tp.pos().x() , tp.pos().y() );
if(tp.id() == ){
if( tp.state() == Qt::TouchPointPressed )
this->_isTouchMode = true;
else
this->_isTouchMode = false;
} QPointF scenepos = this->mapToScene(touchPos.x() , touchPos.y() );
switch( tp.state() ){
case Qt::TouchPointPressed:
this->_currentSlide->onDeviceDown(scenepos, tp.id());
break;
case Qt::TouchPointMoved:
this->_currentSlide->onDeviceMove(scenepos,tp.id());
break;
case Qt::TouchPointReleased:
this->_currentSlide->onDeviceUp(tp.id());
break;
} } if(evType == QEvent::TouchEnd ){
// to do
} return true;
} return QGraphicsView::viewportEvent(event);
}

书写我们是基于QGraphiscLineItem的,书写结束后我们才生成KMPInkElement,所以在slide类中我们看到我们有一个std::vector集合来存储绘制过程中添加产生的QGraphicsLineItem对象,在最后结束绘制后需要画板上移除集合中所有对象。

具体可以查看源码,没有太多复杂的东西

开发环境: QT5.5 ,  QtCreator , win7

源码


最新文章

  1. Node聊天程序实例04:chat_ui.js
  2. 字符串反转C#的实现
  3. Robot Test Framework + Selenium 的几个坑
  4. order_by_、group_by_、having的用法区别
  5. linux忘记mysql密码找回方法
  6. tesseract3.02识别验证码需要注意的问题
  7. CentOS下命令行和桌面模式的切换方法(转载)
  8. c# 根据自定义Attribute排序
  9. 剑指offer编程题Java实现——面试题6重建二叉树
  10. Mybatis操作oracle数据库的一些坑
  11. Django关联数据库时报错TypeError: __init__() missing 1 required positional argument: &#39;on_delete&#39;
  12. ssh命令-使用密钥文件进行登陆
  13. 搭建前端监控系统(三)NodeJs服务器部署篇
  14. Django开发笔记五
  15. 树莓派 CSI摄像头 No data received from sensor. Check all connections, including the Sunny one on the camera board
  16. react-navigation实现页面框架(转载)
  17. day3用户交互,格式化输出,数据类型,流程控制
  18. CAN总线优势
  19. Mac 上flink的安装与启动
  20. asp.net单元测试及查看代码覆盖率详细示例

热门文章

  1. mysql 引擎区分
  2. Web移动端Fixed布局的解决方案
  3. C#类型 分类: C# 2015-03-09 08:44 202人阅读 评论(0) 收藏
  4. 使用Morphia框架操作mongodb
  5. EnterpriseArchitectect 软件的勾选的几个选项对应的中文意思
  6. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(17)-LinQ动态排序
  7. HP P2055d激光打印机PCL XL error的解决
  8. shell 验证ip
  9. [Reactive Programming] Async requests and responses in RxJS
  10. 使用strace追踪多个进程