Bonjour,
Je cherche à créer mon propre GestureRecognizer. Vous le savez peut être déjà, aucun exemple n'existe sur internet, donc j'ai commencé en se basant sur la doc Qt, j'avoue que ce n'est pas vraiment facile ..
j'essaye dans mon exemple de détecter quand l'utilisateur pose 1 doigts sur l'écran. (n'importe quel geste à un doigt devrait être reconnu)
donc, ma class MyGestureRecognizer ressemble à ceci:
Ensuite, j'ai créer un widget qui va prendre en compte ce nouveau geste, la class de ce widget est la suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 class MyGesture : public QGesture {}; class MyGestureRecognizer : public QGestureRecognizer { virtual QGesture *create ( QObject * target ) { qDebug() << "create"; return new MyGesture; } virtual void reset ( QGesture * gesture ) { qDebug() << "reset"; QGestureRecognizer::reset(gesture); } virtual Result recognize(QGesture * , QObject * , QEvent * event) { qDebug() << "recognize"; if(event->type() == QEvent::TouchUpdate) if(static_cast<QTouchEvent *>(event)->touchPoints().size() == 2){ qDebug() << "bingo"; return QGestureRecognizer::TriggerGesture; } return QGestureRecognizer::Ignore; } };
Enfin, dans un MainWindow, j'utilise ce widget comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 FormCustomGest::FormCustomGest(QWidget *parent) : QWidget(parent), ui(new Ui::FormCustomGest) { ui->setupUi(this); // Set touch attribute setAttribute(Qt::WA_AcceptTouchEvents); //! [enable gestures] grabGesture(Qt::CustomGesture); //! [enable gestures] Qt::GestureType type = QGestureRecognizer::registerRecognizer(new MyGestureRecognizer()); qDebug() << "Type:" << type; } FormCustomGest::~FormCustomGest() { delete ui; } bool FormCustomGest::gestureEvent(QGestureEvent *event) { if (QGesture *pinch = event->gesture(Qt::CustomGesture)) { ui->gest->setText("ok"); } ui->gest->setText("Nok"); return true; } bool FormCustomGest::event(QEvent * event ) { if(event->type() == QEvent::Gesture){ return gestureEvent(static_cast<QGestureEvent*>(event)); } return QWidget::event(event); }
Le problème c'est que mon geste n'est jamais reconnu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 FormCustomGest* f = new FormCustomGest(this); setCentralWidget(f);
SAUF SI, je fait hérité mon "MyGeste" de TapGeste, et que je remplace tous les Qt::CustomGesture par des Qt::TapGesture dans le widget, Ce qui est pas vraiment ce que je veux.
Pour résumer, mon widget, ne reconnais jamais les CustomGesture!!
J'ai essayé d'être le plus claire possible, et je pense que je vous est mis tous le code nécessaire.
Merci pour votre aide, je suis vraiment bloqué![]()
Partager