最近项目中遇到一个预览图片的需求,同时能够对手势进行处理,可以处理手势的放大、缩小和平移,其中移动可以通过重写鼠标事件实现。而手势事件之前则没有处理过。查阅资料发现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
*/

最低0.47元/天 解锁文章
676

被折叠的 条评论
为什么被折叠?



