下面以Pinch手势(捏合手势)为例子,讲解如何在QML中实现多点触摸,qt源码中有相应工程,路径为example/declarative/touchinteraction/pincharea。
注册和导入
PinchArea作为QDeclarativeItem的子类,只要qml文件导入相应包(import QtQuick 1.1),可以直接在qml中申明并初始化。PinchArea注册 到QtQuick 1.1的地方见declarative/graphicsitems/qdeclarativeitemsmodule.cpp,L179,注意类名前面都带有QDeclarative前缀。
类申明与定义
QdeclarativePinchArea的头文件见 declarative/graphicsitems/qdeclarativepincharea_p.h,注意一定要从QDeclarativeItem继承。QdeclarativePinchArea有4个信号函数,利用Q_SIGNALS定义,在qml中实例化一个PinchArea时可以同时实现其响应函数,见onPinchStarted、onPinchUpdated和onPinchFinished。对Pinch手势的识别见QDeclarativePinchArea::updatePinch(),如果识别到Pinch手势,会相应发送start、update、finished信号,见emit关键字。 qml中的onPinchStarted、onPinchUpdated和onPinchFinished方法定义了信号传过来时控件应做的动作,这三个方法中直接使用的pinch对象,是信号函数的形参,即一个QDeclarativePinchEvent对象。 理论上这样就可以让控件对pinch手势做出响应,如果不行,请查看平台是否支持多点