Afficher une image avec Qt (zoom, déplacement, redimensionnement, tool-tip, menu contextuel ...)

Cet article montre comment afficher une image avec QT. La classe rOg_image supporte les fonctionnalités suivantes:

  • affiche un QImage dans un widget,
  • affiche une image brute dans un widget,
  • supporte le redimensionnement intelligent,
  • zoom avant et arrière avec la molette,
  • déplacement de l'image avec le bouton gauche (dragging),
  • menu contextuel avec le bouton droit,
  • possibilité de surcharger la classe pour dessiner sur ou sous l'image (premier plan ou arrière plan),
  • possibilité de surcharger la classe pour afficher un tool-tip au passage de la souris.

Téléchargement

Crédits

Cette classe a été développée conjointement avec Simon Landrault (Eskimon).

3 réflexions au sujet de « Afficher une image avec Qt (zoom, déplacement, redimensionnement, tool-tip, menu contextuel ...) »

  1. Salut,
    Je suis en train de développer avec Qt 4.8 un outil pour afficher une image en même temps qu'un texte dans une fenêtre avec 2 cadres utilisant le mode splitter. J'avais commencé avec un QTextEdit et un QLabel, mais rien à faire pour redimensionner l'image dans le label lors du changement de taille des cadres (avec la souris ou lors du zoom de la fenêtre). J'ai bien essayé de réimplémenter resizeEvent)() mais sans succès!
    Et je tombe sur ton exemple...
    J'ai donc basculé du QLabel au QGraphicsView pour pouvoir tester avec la classe surchargée et ça marche du tonnerre (j'aime bien le zoom à la molette!):
    Dans ma fenêtre créée avec QtDesigner, j'ai donc remplacé mon QLabel (en fait une surcharge) par une surcharge de QGraphicsView et utilisé le code proposé en l'adaptant à mon cas...
    NB: initialement, j'utilisais cette fonction:
    void MyLabel::resizeEvent ( QResizeEvent *event ) //le label contenant l'image = ui->image
    {
    const QPixmap *pix = ui->image->pixmap();
    if (pix)
    ui->image->setPixmap(pix->scaled(ui->image->width(),ui->image->height(),
    Qt::KeepAspectRatio, Qt::SmoothTransformation));
    QWidget::resizeEvent(event);
    }
    mais ça ne donne pas le résultat espéré (l'image reste à sa taille initiale) alors que les dimensions du cadre du label changent!
    Hervé 😉

  2. J'ai poursuivi en ajoutant le code pour ajouter l'image par drag & drop sur le cadre myimage (instance de la sous-classe de QGraphicsView) mais là, impossible d'activer le mode drag & drop sur ce dernier! Une idée?
    Hervé 😉

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *