基于Qt QGraphicsView的多点触摸绘图
本应用于基于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
基于Qt QGraphicsView的多点触摸绘图的更多相关文章
- 【转】基于Qt, TUIO和TSLIB的嵌入式Linux下的多点触摸设计
这个教程描述了在嵌入式linux下使用Qt如何设置一个支持多点触摸和单点触摸的输入系统.这里假定你已经有了对应的驱动程序,驱动可以从触摸屏的厂商那里获得或者使用一个linux 内核源码中已经存在的驱动 ...
- 采用Qt快速绘制多条曲线(折线),跟随鼠标动态显示线上点的值(基于Qt的开源绘图控件QCustomPlot进行二次开发)
QCustomPlot是一个开源的基于Qt的第三方绘图库,能够绘制漂亮的2D图形. QCustomPlot的官方网址:https://www.qcustomplot.com/ 从官网下载QCustom ...
- 多点触摸画板(MultiTouchCanvas)
这是个简单的支持多点触摸的画板控件, 绘制功能基于WPF InkCanvas,也是我drawTool系列文章的开篇. 阅读该文章后可能产生一些问题: 1. 如果对生成的笔迹对象进行控制 如果要对生成的 ...
- 让qt应用程序支持触摸
一.设备驱动 我的触摸屏是usb接口的 可以参考下这2篇文件 http://blog.csdn.net/paomadi/article/details/8754783 usb触摸屏 http://bl ...
- Qt Creator中的3D绘图及动画教程(参照NeHe)
Qt Creator中的3D绘图及动画教程(参照NeHe) http://blog.csdn.net/cly116/article/details/47184729 刚刚学习了Qt Creator,发 ...
- CTP多点触摸协议【转】
转自:http://blog.chinaunix.net/uid-26403844-id-5063920.html linux kernel 2.6.30开始对多点触摸支持,最近高通要求所有CTP器件 ...
- Linux & Android 多点触摸协议
Linux & Android 多点触摸协议 Android4.0多点触摸入门 1 KERNEL 对于触摸屏的驱动我们简单的划分为两个主要的部分,一个是注册,另一个是上报. 1.1 注册 单点 ...
- 多点触摸(MT)协议(翻译)
参考: http://www.kernel.org/doc/Documentation/input/multi-touch-protocol.txt 转自:http://www.arm9home.ne ...
- 移动web开发,12个触摸及多点触摸事件常用Js插件
如今移动互联网已经占据了主流地位,越来越多的开发者开始从桌面转向移动平台.与桌面开发不同的是,在移动领域中,不同的操作系统.大量不同屏幕尺寸的移动设备.触摸手势操作等,这都给开发者带来了一定的难度和挑 ...
随机推荐
- Windbg扩展的一些参考文章
Windbg脚本和扩展工具开篇http://www.cnblogs.com/pugang/archive/2012/11/30/2796617.html WinDbg简单扩展DLL http://ww ...
- 2013腾讯编程马拉松初赛第一场(3月21日) 湫湫系列故事——减肥记II ----线段树
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4509 虽然制定了减肥食谱,但是湫湫显然克制不住吃货的本能,根本没有按照食谱行动! 于是,结果显而易见… 但 ...
- mvcc摘抄
MVCC浅析原文:---->>>>>> http://blog.csdn.net/chosen0ne/article/details/18093187 在并发读写数 ...
- XSS 简单理解
什么是XSS? XSS(Cross Site Scripting),即跨站脚本攻击,是一种常见于web application中的计算机安全漏洞.XSS通过在用户端注入恶意的可运行脚本,若服务器端对用 ...
- ifndef系列
文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了, ...
- C# 模拟用户登录
, data.Length); newStream.Close(); request.CookieContainer ...
- 【JAVA - SSM】之SSM入门项目的搭建
最近学习了一下SSM.SSM是 Spring + SpringMVC + MyBatis 整合框架,非常适合WEB后台开发,也是当前很多人的不二选择.这篇博客带大家来创建一个学习SSM的入门程序,从搭 ...
- PHP代码为什么不能直接保存HTML文件——>PHP生成静态页面教程
1.server会依据文件的后缀名去进行解析,假设是HTML文件则server不会进行语法解析.而是直接输出到浏览器. 2.假设一个页面中所有都是HTML代码而没有须要解析的PHP语法,则没有必要保存 ...
- mybatis0205 一对多查询 复杂
查询所有用户信息,关联查询订单及订单明细信息及商品信息,订单明细信息中关联查询商品信息 1.1sql 主查询表:用户信息 关联查询:订单.订单明细,商品信息 SELECT orders.*, user ...
- [转] Express 4 中的变化
http://www.cnblogs.com/haogj/p/3985438.html 概览 从 Express 3 到Express 4 是一个巨大的变化,这意味着现存的 Express 3 应用在 ...