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

网站的组成如何制作付费视频网站

网站的组成,如何制作付费视频网站,深圳网站建设需要多少钱,网站开发流程原理本文介绍的QGraphicsView的双指缩放,QWidget更简单,可以参考当前内容。 方法一:(QTouchEvent事件实现) 使用场景:适用于paintevent绘制下的界面。 优点:不需要代码设置中心锚点(锚点…

本文介绍的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::event"<<e->type();QTouchEvent *touchEvent = static_cast<QTouchEvent *>(e);QList<QTouchEvent::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()<<index<<currentScaleFactor<<_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()<<"====="<<_startScenePos<<touchPoint.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_cast<QGestureEvent *>(e);if (QGesture* pinch = gEvent->gesture(Qt::PinchGesture)){QPinchGesture* pEvent = static_cast<QPinchGesture *>(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.tj-hxxt.cn/news/8065.html

相关文章:

  • 建立网站需要哪些手续下载app到手机上并安装
  • 做网站aspseo费用价格
  • 做电商要不要公司网站朝阳seo建站
  • 企业网站美工设计推广文案范例
  • 泉州做外贸网站百度广告联盟赚广告费
  • 为什么企业需要建设网站?seo如何优化排名
  • 美团这个网站多少钱做的哪些平台可以免费打广告
  • 电子商务网站建设策划谷歌自然排名优化
  • 萧山网页设计seo方法培训
  • 可以自己做网站优化吗网络营销和推广的方法
  • 江门网站建设方案seo智能优化系统
  • 南京今天的最新消息无锡网站建设seo
  • 番禺做网站多少钱什么是搜索引擎销售
  • 萧山网站优化西安网络推广公司
  • 系统管理网站有必要买优化大师会员吗
  • 招聘类网站如何做自己怎么搭建网站
  • 网站建设优点百度总部客服电话
  • 网站项目运营在线种子资源库
  • 做水果网站弄个什么名字网络运营怎么学
  • 东南亚做棋牌网站谷歌sem和seo区别
  • 哪个网站有介绍拿到家做的手工活域名ip查询
  • 吉林省做网站公司色盲色弱测试
  • 手机网站在后台怎么做编辑seo网站推广是什么
  • 谷歌搜索引擎免费入口windows优化大师下载安装
  • 学校网站模板免费长尾词seo排名优化
  • 深圳h5开发网络营销推广seo
  • 聊城哪儿做网站便宜网络搜索优化
  • 网站建设好销售吗seoshanghai net
  • 做写真网站的限度网页搜索关键词
  • 山西省网站建设价格百度推广怎么做