zoukankan      html  css  js  c++  java
  • Qt for android触摸手势事件QGestureEvent

    在触摸设备上可以使用Qt的手势事件

    要激活手势事件,需要执行以下操作:

    第一步,为QWidget控件注册手势事件

    QList<Qt::GestureType> gestures;
        gestures << Qt::PanGesture;
        gestures << Qt::PinchGesture;
        gestures << Qt::SwipeGesture;
        gestures << Qt::TapGesture;
        gestures << Qt::TapAndHoldGesture;
        MainWindow w;
        w.grabGestures(gestures);
     
    第二步,在QWidget控件类中过滤事件
    bool MainWindow::event(QEvent *event)
    {
        if (event->type() == QEvent::Gesture)
            return gestureEvent(static_cast<QGestureEvent*>(event));
        return QWidget::event(event);
    }
    
    
    bool MainWindow::gestureEvent(QGestureEvent *event)
    {
        qCDebug(lcExample) << "gestureEvent():" << event->gestures().size();
        if (QGesture *swipe = event->gesture(Qt::SwipeGesture))
            swipeTriggered(static_cast<QSwipeGesture *>(swipe));
        else if (QGesture *pan = event->gesture(Qt::PanGesture))
            panTriggered(static_cast<QPanGesture *>(pan));
        else if (QGesture *tap = event->gesture(Qt::TapGesture))
            tapTriggered(static_cast<QTapGesture *>(tap));
        else if (QGesture *tapAndHold = event->gesture(Qt::TapAndHoldGesture))
            tapAndHoldTriggered(static_cast<QTapAndHoldGesture *>(tapAndHold));
        if (QGesture *pinch = event->gesture(Qt::PinchGesture))
            pinchTriggered(static_cast<QPinchGesture *>(pinch));
        return true;
    }
    //! [gesture event handler]
    
    
    void MainWindow::panTriggered(QPanGesture *gesture)
    {
    #ifndef QT_NO_CURSOR
        switch (gesture->state()) {
            case Qt::GestureStarted:
            case Qt::GestureUpdated:
                setCursor(Qt::SizeAllCursor);
                break;
            default:
                setCursor(Qt::ArrowCursor);
        }
    #endif
        QPointF delta = gesture->delta();
        qCDebug(lcExample) << "panTriggered():" << delta;
        horizontalOffset += delta.x();
        verticalOffset += delta.y();
    }
    
    
    void MainWindow::pinchTriggered(QPinchGesture *gesture)
    {
        QPinchGesture::ChangeFlags changeFlags = gesture->changeFlags();
        if (changeFlags & QPinchGesture::RotationAngleChanged) {
            const qreal value = gesture->property("rotationAngle").toReal();
            const qreal lastValue = gesture->property("lastRotationAngle").toReal();
            const qreal rotationAngleDelta = value - lastValue;
            rotationAngle += rotationAngleDelta;
            qCDebug(lcExample) << "pinchTriggered(): rotation by" << rotationAngleDelta << rotationAngle;
        }
        if (changeFlags & QPinchGesture::ScaleFactorChanged) {
            qreal value = gesture->property("scaleFactor").toReal();
            currentStepScaleFactor = value;
            qCDebug(lcExample) << "pinchTriggered(): " << currentStepScaleFactor;
        }
        if (gesture->state() == Qt::GestureFinished) {
            scaleFactor *= currentStepScaleFactor;
            currentStepScaleFactor = 1;
        }
        update();
    }
    
    
    //! [swipe function]
    void MainWindow::swipeTriggered(QSwipeGesture *gesture)
    {
        if (gesture->state() == Qt::GestureFinished) {
            if (gesture->horizontalDirection() == QSwipeGesture::Left
                || gesture->verticalDirection() == QSwipeGesture::Up) {
                qCDebug(lcExample) << "swipeTriggered(): swipe to previous";
            } else {
                qCDebug(lcExample) << "swipeTriggered(): swipe to next";
            }
        }
    }
    //! [swipe function]
    
    
    void MainWindow::tapTriggered(QTapGesture *gesture)
    {
        qCDebug(lcExample) << "tapTriggered():" ;
    }
    
    
    void MainWindow::tapAndHoldTriggered(QTapAndHoldGesture *gesture)
    {
        qCDebug(lcExample) << "tapAndHoldTriggered():";
    }

    参考源代码 http://download.csdn.net/detail/liuguangzhou123/7616623

    http://blog.csdn.net/liuguangzhou123/article/details/37656495

  • 相关阅读:
    [core java学习笔记][第五章继承]
    [core java学习笔记][第四章对象与类]
    【转载】Maven中的BOM概念
    【转载】关于docker某些有用的文章
    【转载】linux Jumpserver跳板机堡垒机部署安装使用教程
    四:(之五)Dockerfile语法梳理和实践
    四:FAQ附录(容器交互,镜像交互,镜像导出)
    四:(之四)基于已有镜像构建自己的Docker镜像
    四:(之三)制作镜像和一些docker命令
    四:(之一和之二) docker架构和底层技术分析(C/S架构)
  • 原文地址:https://www.cnblogs.com/findumars/p/6361985.html
Copyright © 2011-2022 走看看