Qt for android触摸手势事件QGestureEvent「建议收藏」

Qt for android触摸手势事件QGestureEvent「建议收藏」在触摸设备上可以使用Qt的手势事件要激活手势事件,需要执行以下操作:第一步,为QWidget控件注册手势事件QListgestures;gesturesgesturesgesturesgesturesgesturesMainWindoww;w.grabGestures(gestur

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在触摸设备上可以使用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():";
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197398.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java的db是什么_java db[通俗易懂]

    java的db是什么_java db[通俗易懂]关于javadb的搜索结果问题关于DB+RECORD操作oracle数据库的问题?报错@JFinal你好,想跟你请教个问题:我操作oracle数据库,插入一条记录Recorduser=newRecord().set(“userid”,…爱吃鱼的程序员2020-06-2220:22:060浏览量回答数1回答为什么不用分页查询是为了导出Excel使用的,前台页面的分页查询没有问题…

    2022年7月7日
    43
  • c语言 木马编程教学,木马编程 之超强服务… 附代码 原创.

    c语言 木马编程教学,木马编程 之超强服务… 附代码 原创.该楼层疑似违规已被系统折叠隐藏此楼查看此楼}BOOLAddSvchostGroup(VOID){HKEYhkey;//其实是一个句柄.if(RegOpenKey(HKEY_LOCAL_MACHINE,”SOFTWARE\\Microsoft\\WindowsNT\\CurrentVersion\\SvcHost”,&hkey)!=ERROR_SUCCESS)returnFALSE…

    2022年6月14日
    30
  • 20款优秀的基于浏览器的在线代码编辑器「建议收藏」

    20款优秀的基于浏览器的在线代码编辑器「建议收藏」20款优秀的基于浏览器的在线代码编辑器1.CompilrCompilr是一个在线编译器和在线IDE。可以用它来开发PHP,C,C++,Ruby。在浏览器中编译Java,C#和VB.net等。马上使用2.Dabblet跨浏览器兼容,对前端攻城师们来说是一个不得不处理的问题。为了在浏览器间呈现统一的显示效果,攻城师们不仅要为每个游览器添加CSS前缀,甚至还需要用到一…

    2022年6月26日
    98
  • elementui树形控件_elementui树形控件筛选

    elementui树形控件_elementui树形控件筛选实现效果与原理我们希望实现鼠标移动至树型结构的结点上就显示按钮,移出就隐藏按钮实现原理:是通过@mouseenter和@mouseleave两个属性来控制鼠标hover的效果,再配合v-sho

    2022年7月31日
    8
  • 如何用matlab画函数图_matlab常用画图函数

    如何用matlab画函数图_matlab常用画图函数数学建模常用matlab工具(代码)画图画图散点图:scatter(X,Y,S)S确定每个标记的面积。S可以是与X和Y相同长度的矢量或标量。如果S为空,则使用默认大小,如果S是标量,则MATLAB绘制所有标记的大小相同。如果S是矢量,则分别对应为X、Y所确定圆的大小;scatter([11121314],[14152627],[202510038])…

    2022年9月2日
    2
  • oracle中sequence是什么意思_consequence的用法

    oracle中sequence是什么意思_consequence的用法在oracle中sequence就是序号,每次取的时候它会自动增加。sequence与表没有关系。1、CreateSequence首先要有CREATESEQUENCE或者CREATEANYSEQUENCE权限。创建语句如下:sql;”>CREATESEQUENCEseqTestINCREMENTBY1–每次加几个STARTWITH1–从1开始计数NOMAXva…

    2022年10月19日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号