Qt实现手势缩放和平移(QGestureEvent)

        最近项目中遇到一个预览图片的需求,同时能够对手势进行处理,可以处理手势的放大、缩小和平移,其中移动可以通过重写鼠标事件实现。而手势事件之前则没有处理过。查阅资料发现Qt自带了一个手势示例,如下图所示,通过阅读代码发现可以通过QGestureEvent事件实现。具体代码如下。

#pragma once

#include "ui_testGesture.h"

#include <QWidget>
#include <QGesture>
#include <QPanGesture>
#include <QPinchGesture>
#include <QGestureEvent>

class testGesture : public QWidget
{
    Q_OBJECT

public:
    testGesture(QWidget *parent = nullptr);
    ~testGesture();

    /**
     * brief:注册所关注的手势事件.
     * 
     * \param gestures:需要关注的事件
     */
    void grabGestures(const QList<Qt::GestureType>& gestures);

protected:
    /**
     * brief:重写paintevent。这是实现的核心,通过修改绘制的中心坐标实现图像根据手势的移动.
     * 
     * \param event
     */
    void paintEvent(QPaintEvent* event)override;
    /**
     * brief:尺寸变化.
     * 
     * \param event
     */
    void resizeEvent(QResizeEvent* event)override;
    /**
     * brief:双击事件,双击后所有的缩放移动等均失效,恢复到初始状态.
     * 
     * \param event
     */
    void mouseDoubleClickEvent(QMouseEvent* event)override;
    /**
     * brief:按下事件,任务需要移动了,不再处理手势.
     * 
     * \param event
     */
    void mousePressEvent(QMouseEvent* event)override;
    /**
     * brief:按下并移动的处理.
     * 
     * \param event
     */
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值