1、概述
QGesture
是 Qt 框架中用于处理多点触控和手势识别的类。它封装了用户输入的手势信息,如触摸、滑动、捏合、旋转等,使得开发者能够轻松地实现复杂的手势交互功能。QGesture
类本身是一个抽象基类,不能直接实例化,而是通过其子类(如 QPanGesture
、QPinchGesture
、QRotateGesture
、QSwipeGesture
、QTapGesture
和 QTapAndHoldGesture
)来表示具体的手势类型。
2、重要方法
- gestureType() const:返回手势的类型,即该
QGesture
对象是哪个具体手势子类的实例。 - hotSpot() const:返回手势的热点,即手势中最重要或最中心的点。对于某些手势(如捏合和旋转),热点可能用于确定手势的旋转中心或缩放中心。
- setHotSpot(const QPointF &point):设置手势的热点。
- state() const:返回手势的状态,如已开始、已更新或已结束。
- setGestureCancelPolicy(Qt::GestureCancelPolicy policy):设置手势取消策略,用于确定在特定情况下是否应取消手势识别。
3、重要信号
QGesture
类本身不直接发出信号,但手势识别器(QGestureRecognizer
)和手势事件(QGestureEvent
)会涉及信号和槽的交互。开发者通常会在处理手势事件的槽函数中响应手势的变化。
然而,与 QGesture
相关的类(如 QGestureRecognizer
和 QWidget
的手势扩展)可能会发出与手势识别和处理相关的信号。例如,当手势被识别时,QWidget
可能会通过其 grabGesture()
方法注册的手势识别器来间接地触发某些行为。
4、常用枚举类型
- GestureType:枚举类型,表示手势的类型,如
PanGesture(平移)
、PinchGesture(捏合)
、SwipeGesture(滑动)、TapGesture(轻击)、TapAndHoldGesture(长按)
等。 - GestureCancelPolicy:枚举类型,用于设置手势取消策略,如
CancelPolicyNone
(不取消手势)、CancelPolicyOnActivePress
(在主动按压时取消手势)等。
#include <QApplication>
#include <QWidget>
#include <QGestureEvent>
#include <QPanGesture>
#include <QPinchGesture>
#include <QDebug>class GestureWidget : public QWidget {Q_OBJECTprotected:void gestureEvent(QGestureEvent *event) override {if (QGesture *pan = event->gesture(Qt::PanGesture)) {handlePanGesture(static_cast<QPanGesture *>(pan));} else if (QGesture *pinch = event->gesture(Qt::PinchGesture)) {handlePinchGesture(static_cast<QPinchGesture *>(pinch));}}private slots:void handlePanGesture(QPanGesture *gesture) {QPointF delta = gesture->delta();qDebug() << "Pan gesture detected, delta:" << delta;// 在这里处理平移手势,例如移动窗口内容}void handlePinchGesture(QPinchGesture *gesture) {qreal scaleFactor = gesture->scaleFactor();QPointF centerPoint = gesture->centerPoint();qDebug() << "Pinch gesture detected, scale factor:" << scaleFactor << ", center point:" << centerPoint;// 在这里处理捏合手势,例如缩放窗口内容}void enableGestures() {grabGesture(Qt::PanGesture);grabGesture(Qt::PinchGesture);// 可以根据需要抓取其他手势类型}public:GestureWidget(QWidget *parent = nullptr) : QWidget(parent) {enableGestures();}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);GestureWidget widget;widget.show();return app.exec();
}
技术交流qq群:
觉得有帮助的话,打赏一下呗。。
需要商务合作(定制程序)的欢迎私信!!