当前位置: 首页 > news >正文

安徽省新天源建设公司网站后台网站建设招聘

安徽省新天源建设公司网站,后台网站建设招聘,想开网站建设公司,域名注册之后如何建设网站本文介绍的QGraphicsView的双指缩放#xff0c;QWidget更简单#xff0c;可以参考当前内容。 方法一#xff1a;#xff08;QTouchEvent事件实现#xff09; 使用场景#xff1a;适用于paintevent绘制下的界面。 优点#xff1a;不需要代码设置中心锚点#xff08;锚点…本文介绍的QGraphicsView的双指缩放QWidget更简单可以参考当前内容。 方法一QTouchEvent事件实现 使用场景适用于paintevent绘制下的界面。 优点不需要代码设置中心锚点锚点视图变化期间通过此点定位场景。 缺点界面上所有其它操作无法响应需单独做处理才能做相应。无法响应原因是使用了”return true“打断了”触摸点击“转化为”鼠标点击“。但是不使用”retuen true“又会造成”触摸点击“默认转化成了”鼠标点击“触摸操作无法过度到TouchUpdate中来捕获到多点触摸了。 使用步骤 1、首先需要打开触摸屏功能。 this-setAttribute(Qt::WA_AcceptTouchEvents); 2、在event事件管理器中接收触摸屏的三个事件TouchBegin、TouchUpdate和TouchEnd。 3、判断单点触摸还是多点触摸。 4、如果多点触摸通过比较前后两次两点间触摸位置来判断是放大还是缩小。 5、多点触摸时会存在抖动情况需要做防抖处理。 6、如果是单点触摸通过比较手指放上去的位置和手指拖动时的位置来设置界面滚动条的位置。 代码 属性设置 this-setAttribute(Qt::WA_AcceptTouchEvents);缩放和移动逻辑 bool MGraaphicsView::event(QEvent *e) {static int index 0;switch (e-type()) {case QEvent::TouchBegin:case QEvent::TouchUpdate:case QEvent::TouchEnd:{qDebug() CProjectionPicture::evente-type();QTouchEvent *touchEvent static_castQTouchEvent *(e);QListQTouchEvent::TouchPoint touchPoints touchEvent-touchPoints();if (touchPoints.count() 2) {//缩放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 (currentScaleFactor _lastScaleFactor)index;else if (currentScaleFactor _lastScaleFactor)index--;if (index 5)//超过5次放大则认为有效.防抖操作{index 0;zoomOnce(true);}else if (index -5){index 0;zoomOnce(false);}qDebug()indexcurrentScaleFactor_lastScaleFactor;_lastScaleFactor currentScaleFactor;update();}else if (touchPoints.count() 1){//移动 const QTouchEvent::TouchPoint touchPoint touchPoints.first();if (e-type() QEvent::TouchBegin || e-type() QEvent::TouchEnd)_startScenePos mapToScene(touchPoint.pos().toPoint());if (e-type() QEvent::TouchUpdate){QPointF endScenePos mapToScene(touchPoint.pos().toPoint());QPointF delta endScenePos - _startScenePos;int oposx this-horizontalScrollBar()-value();int oposy this-verticalScrollBar()-value();int nposx oposx - delta.x();int nposy oposy - delta.y();this-horizontalScrollBar()-setValue(nposx);this-verticalScrollBar()-setValue(nposy);}qDebug()_startScenePostouchPoint.pos();}if (touchEvent-touchPointStates() Qt::TouchPointReleased){qDebug()Qt::TouchPointReleased;}return true;//一定不要调QGraphicsView::event(e);否则手指触摸会经常失效}default:break;}return QGraphicsView::event(e); }//缩放 void MGraaphicsView::zoomOnce(bool increase) {if (increase)setZoom(1);elsesetZoom(-1); }void MGraaphicsView::setZoom(int val) {if (val 0){m_zoom;auto scaleValue qPow(2, m_zoom);setTransform(QTransform::fromScale(scaleValue, scaleValue));}else{m_zoom--;auto scaleValue qPow(2, m_zoom);setTransform(QTransform::fromScale(scaleValue, scaleValue));} }方法二QGesture事件实现 使用场景适用所有场景。 优点界面上界面上所有操作都不受影响。 缺点需要代码定位视图锚点。QGraphicsView需要定位视图锚点如果是QWidget则不需要定位锚点这一步缩放大小和位置代码设置即可。 使用步骤 1、首先需要打开触摸屏功能和注册缩放手势。 grabGesture(Qt::PinchGesture);//”捏“手势 this-setAttribute(Qt::WA_AcceptTouchEvents); 所有手势介绍 enum GestureType {TapGesture 1, //轻拍手势。1个手指单击TapAndHoldGesture 2, //轻触并保持长按手势。1个手指单击并长按PanGesture 3, //平移手势。1个手指拖动PinchGesture 4, //捏合缩放及缩放2个手指捏合或转动SwipeGesture 5, //滑动手势。3个手指平移CustomGesture 0x0100, //可用于测试手势是否为用户定义的手势ID的标志。 };自定义手势 2、在event事件管理器中接收QEvent::Gesture事件并转化为QGestureEvent事件。 3、获取”捏“手势并转化为QPinchGesture事件。 4、获取”捏“手势变化状态。 5、判断捏手势变化状态根据QPinchGesture::ScaleFactorChanged状态变化计算缩放比例。 6、在GestureUpdated的变化下根据缩放比例来处理缩小和扩大。 代码 bool InteractiveMap::event(QEvent *e) {static int index 0; #if 1if (e-type() QEvent::Gesture){QGestureEvent* gEvent static_castQGestureEvent *(e);if (QGesture* pinch gEvent-gesture(Qt::PinchGesture)){QPinchGesture* pEvent static_castQPinchGesture *(pinch);QPinchGesture::ChangeFlags changeFlags pEvent-changeFlags();//旋转角度的变化记录if (changeFlags QPinchGesture::RotationAngleChanged){ // qreal rotationDelta pEvent-rotationAngle() - pEvent-lastRotationAngle(); // qDebug() pinchTriggered(): rotate by rotationDelta;}static qreal s_factor 1.;//缩放比例的变化记录if (changeFlags QPinchGesture::ScaleFactorChanged){s_factor * pEvent-totalScaleFactor();}int id (int)pEvent-state();switch (id){case Qt::GestureStarted:case Qt::GestureUpdated:{//视图在变换期间应如何定位场景。//QGraphicsView使用此属性来决定在变换矩阵发生变化以及视图的坐标系发生变换时如何在视口中定位场景。//默认行为AnchorViewCenter可确保视图中心的场景点在变换期间保持不变例如旋转时场景将显示为围绕视图中心旋转。setTransformationAnchor(QGraphicsView::AnchorViewCenter); //视图中心的场景点用作锚点if (s_factor 1)index;elseindex--;if (index 5) //超过5次放大则认为有效.防抖操作{index 0;zoomOnce(true);}else if (index -5){index 0;zoomOnce(false);}setTransformationAnchor(QGraphicsView::AnchorUnderMouse); //鼠标下方的点用作锚点。}break;case Qt::GestureFinished:default:{s_factor 1.;}break;}}}return QGraphicsView::event(e); } void MGraaphicsView::zoomOnce(bool increase) {if (increase)setZoom(1);elsesetZoom(-1); }void MGraaphicsView::setZoom(int val) {if (val 0){m_zoom;auto scaleValue qPow(2, m_zoom);setTransform(QTransform::fromScale(scaleValue, scaleValue));}else{m_zoom--;auto scaleValue qPow(2, m_zoom);setTransform(QTransform::fromScale(scaleValue, scaleValue));} }
http://www.w-s-a.com/news/266505/

相关文章:

  • 衡阳商城网站制作ps做网站首页规范尺寸
  • 微信网站应用开发营销推广的方案
  • 广州做网站商城的公司制作一个app的完整流程
  • 湖南城乡建设厅网站163注册企业邮箱
  • 做网站怎么调整图片间距织梦做的网站如何去掉index
  • 凡科网免费建站步骤及视频网页设计基础教程第二版课后答案
  • 建设一个旅游网站毕业设计企业网站要更新文章吗
  • 做网站需要简介中山网站设计公司
  • 网站怎么做导航栏微信公众号官网登录
  • 1_ 掌握网站开发的基本流程 要求:熟悉网站开发与设计的基本流程.电子商城网站开发
  • 百度网站怎么建设河北省工程造价信息网官网
  • 阿里云网站模板网页设计的合适尺寸是多少
  • 做小程序和做网站哪个好让别人做网站推广需要多少钱
  • 做外贸的几个网站查询网域名解析
  • 酒泉如何做百度的网站seo研究中心好客站
  • 网站设计建设平台户县做网站
  • 一元云购网站开发wordpress博客空间
  • 深圳高端网站建设公司排名如何搭建局域网服务器
  • 照片管理网站模板高端网站开发哪家好
  • 黄冈网站制作wordpress为什么不能显示域名
  • 做网站设计怎么进企业电子商务网站建设与管理教材
  • 设计广告公司网站建设网站开发技术选择
  • 个人网站教程个人网站有必要备案吗
  • 网站建设推广好做吗黄浦企业网站制作
  • 怎样做28网站代理中山网站建设方案外包
  • vs2010做网站前台搭建小网站
  • 做视频必须知道的一些网站wordpress 标签鼠标滑过_弹出的title 代码美化
  • 怎么做室内设计公司网站电商运营培训视频课程
  • 昆明网站策划天津市建筑信息平台
  • 三亚放心游app官方网站wordpress 个人主题