I. L'article original▲
Qt Labs est un site géré par les développeurs de Qt. Ils y publient des projets, des idées propres et des composants afin d'obtenir les retours d'information sur les API, le code et les fonctionnalités ou simplement pour partager avec nous ce qui les intéresse. Le code que vous y trouverez peut fonctionner tel quel mais c'est sans aucune garantie ni support. Voir les conditions d'utilisation pour plus d'informations.
Nokia, Qt, Qt Labs et leurs logos sont des marques déposées de Nokia Corporation en Finlande et/ou dans les autres pays. Les autres marques déposées sont détenues par leurs propriétaires respectifs.
Cet article est la traduction de l'article Gestures in 4.7.1 behavior change de Frederik Gladhorn paru dans Qt Labs.
II. Le changement▲
Résoudre des bogues veut parfois dire changer son comportement. Le framework Gesture est encore relativement nouveau dans Qt. Il est apparu pour la première fois dans Qt 4.6, mais il commence à être vraiment utilisé seulement maintenant avec Qt 4.7. Malheureusement, nous avons découvert ce bogue trop tard pour intégrer un correctif dans Qt 4.7.0 mais il semble suffisamment important pour l'être dans 4.7.1.
Le "pincement" a une propriété qui représente le facteur de zoom. Celui-ci devrait être initialisé avec une valeur de 0.0 et le facteur d'échelle devrait être la somme de tous les facteurs d'échelle... comme pour la rotation où l'angle est additionné.
Bien... Admettons, c'était une erreur de réflexion. Une mise à l'échelle est une propriété multiplicative. Donc, à partir de Qt 4.7.1, cette horrible erreur a été corrigée pour vous permettre d'utiliser plus facilement le zoom. Nous pensons que c'est si important que cela doit être intégré dans Qt dès maintenant, comme c'est un changement de comportement et que nous voulons permettre l'utilisation de Qt sur les périphériques.
Donc, si vous avez une image et que vous voulez utiliser deux doigts pour la redimensionner, tout ce que vous avez à faire est de multiplier les échelles avec QPinchGesture::scaleFactor() et c'est bon.
Qu'avons nous dans QPinchGesture ?
- scaleFactor - chaque fois que vous avez un événement de geste, vous pouvez multiplier par cette valeur pour mettre à jour votre objet ;
- totalScaleFactor - c'est le facteur d'échelle depuis le début du "pincement" - si tout ce qui vous intéresse c'est l'échelle finale, voici ce que vous voulez.
Le commit dans la branche de Qt 4.7 est celui ci : e6b2bb6d6a48e722311cd2c5fd86c015eab24b4d