基于Qt QGraphicsView的多点触摸绘图
2016-04-26 15:37
477 查看
本应用于基于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来实现多点笔迹的管理.
书写我们是基于QGraphiscLineItem的,书写结束后我们才生成KMPInkElement,所以在slide类中我们看到我们有一个std::vector集合来存储绘制过程中添加产生的QGraphicsLineItem对象,在最后结束绘制后需要画板上移除集合中所有对象。
具体可以查看源码,没有太多复杂的东西
开发环境: QT5.5 , QtCreator , win7
源码
工程结构:
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() == 0 ){ 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全局坐标和相对坐标
- Qt事件驱动处理机制
- Qt之读写文件
- Qt 飞机仪表显示
- Qt 在Label上面绘制罗盘
- Qt.WebSocket导致的部署失败及解决方案
- QT基础(六)----QDialog窗口 & MainWIndow窗口
- Qt 播放音频文件
- 第11课 Qt中的字符串类
- 树莓派安装PyQt5
- 在mac下使用qt5连接mysql5.7
- 第10课 初探 Qt 中的消息处理
- OS X Qt Creator: Undefined symbols for architecture x86_64
- Qt:文件浏览器添加右击菜单实现重命名
- 【Qt】UserInfo
- [QT]qdebug的使用方法 或者说 使用格式
- QT + OpenCV2.4.10环境搭建,我用的是vs2013编译器
- Qt之软件打包
- Qt 5中获取默认存储用户数据路径
- Qt debug release包含不同的lib