IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

QScrollArea et zoom intelligent "à la google maps" sur une image


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut QScrollArea et zoom intelligent "à la google maps" sur une image
    Bonjour tout le monde,

    Dans mon utilisation frénétique de Qt, comme vous l'avez peut-être vu dans un de mes derniers topics, je suis en présence d'une image, affichée dans une QScrollArea. On a la possibilité de zoomer, i.e que l'image devienne plus grande que la QScrollArea, auquel cas les scrollbar entrent en jeu. Jusque là, ok, ça marche. Pour zoomer, je redimensionne simplement l'image à l'intérieur en multipliant largeur et hauteur par un facteur bien précis.

    Pour zoomer, je propose deux choses : utiliser +/- du clavier, ou la molette de la souris.
    Dans tous les cas, quand je zoom, ça ne fait qu'agrandir l'image, sans remettre le "focus" sur la zone sur laquelle était le pointeur de la souris. Or, ça commence à devenir très gênant pour l'utilisation du logiciel.

    J'ai essayé de forcer le scroll etc, mais ça ne scroll rien du tout.

    Quelqu'un aurait-il une illumination pour la méthode à employer pour zoomer intelligemment, i.e en centrant sur l'endroit ou se situait le curseur avant le zoom ?

    Merci pour votre attention et votre temps.

  2. #2
    Membre expérimenté
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Par défaut
    Tu as essayé de forcer le scroll par quels méthodes?

    ensureVisible() ?
    en récupérant les QScrollBars ?

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Ca devrait en effet être possible en forçant le scroll.

    Sinon ,une autre piste est de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QPainter->translate(QPoint(positionClickée)-QPoint(centreDeTonWidget))//et appliquer ton facteur de grossissement
    Par contre tu perdras peut être une partie de ton image. Et bien sûr il faut que tu utilises QPainter pour redessiner ton image.

    G.

  4. #4
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Citation Envoyé par Niak74 Voir le message
    Tu as essayé de forcer le scroll par quels méthodes?

    ensureVisible() ?
    en récupérant les QScrollBars ?
    J'avais essayé ensureVisible et un scroll explicite avec les scrollbars. Ca ne marchait pas

    Citation Envoyé par Gulish Voir le message
    Ca devrait en effet être possible en forçant le scroll.

    Sinon ,une autre piste est de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QPainter->translate(QPoint(positionClickée)-QPoint(centreDeTonWidget))//et appliquer ton facteur de grossissement
    Par contre tu perdras peut être une partie de ton image. Et bien sûr il faut que tu utilises QPainter pour redessiner ton image.

    G.
    Je fais comme suit pour dessiner mon image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p.drawImage(0, 0, image.scaled(width(), height()));
    (image étant une QImage biensûr)

    Et le zoom :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void ImageViewer::zoom(double factor)
    {
    	resize(factor*width(), factor*height());
    	update();
    }
    ImaveViewer, c'est la classe (qui est un widget) qui contient la scrollarea, l'image, etc).

    J'ai du mal à voir comment caser le translate. Puisque l'appel à zoom demande à redessiner, mais ne redessine pas explicitement, puisqu'il faut être dans paintEvent() pour ça.

    Donc j'enregistre la position du curseur lors de la demande de zoom, pour ensuite m'en servir dans paintEvent() comme tu l'as mentionné. J'ai tout bien compris ?

  5. #5
    Membre expérimenté
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Par défaut
    Je ne sais pas exactement ce que tu veux faire et avoir comme rendu, mais il y a une autre solution, plus longue car il te faudra recoder pas mal de choses, qui consiste à utiliser QGraphics (une vue, une scene, un item contenant ton image et des opération sur l'item comme moveBy, rotate, scale, transform, et compagnie). Tu auras alors de nouvelles possibilités et un rendu plus riche que QScrollArea.

    Mais là encore, tout dépend de ce que tu veux faire.

  6. #6
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Citation Envoyé par Niak74 Voir le message
    Mais là encore, tout dépend de ce que tu veux faire.
    J'aimerais éviter, surtout que je dois pouvoir faire ce que je veux sans passer par QGraphics. J'ai juste besoin de pouvoir zoomer intelligemment là

Discussions similaires

  1. Pb de projection de google map hybride sur mobile
    Par christian.bleau dans le forum IGN API Géoportail
    Réponses: 6
    Dernier message: 01/03/2014, 12h09
  2. google maps api v2 et image qui bouge
    Par Batos dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 03/07/2013, 05h12
  3. Google maps API dans une application Web
    Par charleydc5 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 21/06/2010, 11h26
  4. Geolocalisation sur une image type google map
    Par James_ dans le forum LabVIEW
    Réponses: 3
    Dernier message: 09/02/2010, 09h52
  5. Google map - Déplacement en cliquant sur une image
    Par Laurelaie dans le forum GWT et Vaadin
    Réponses: 2
    Dernier message: 06/05/2008, 15h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo