Developpez.com

Télécharger gratuitement le magazine des développeurs, le bimestriel des développeurs avec une sélection des meilleurs tutoriels

FAQ Qt FAQ Qt Creator FAQ PyQt & PySide

FAQ QtConsultez toutes les FAQ

Nombre d'auteurs : 26, nombre de questions : 298, dernière mise à jour : 22 avril 2017 

 
OuvrirSommaireModulesQt GUI et Qt WidgetsGénéralitésImages/icônes

La méthode la plus simple est d'utiliser un QLabel conjointement à un QPixmap.

 
Sélectionnez
#include <QtGui>

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);
    QLabel label;
    //on donne l'image au label
    label.setPixmap(QPixmap("c:/image.png"));
    label.show();
    QObject::connect(&label, SIGNAL(clicked()), &app, SLOT(quit()));
    return app.exec();
}
Mis à jour le 7 mai 2012  par Denys Bulant

Comme un GIF animé est non statique, on ne peut pas afficher l'animation avec une QImage ou une QPixmap. Pour cela, Qt fournit une classe réservée aux vidéos : QMovie.

La méthode la plus simple est de créer un QMovie avec le GIF et de l'associer à un label.

 
Sélectionnez
#include <QtGui>

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);
    QLabel w;

    // On crée une vidéo. Ici, c'est un GIF
    QMovie movie("c:/Mickey-11.gif");
    // On l'associe à un label
    w.setMovie (&movie);
    // On lance la vidéo
    movie.start ();

    w.show();
    return app.exec();
}

Il faut tout de même préciser que la compilation du plug-in GIF est nécessaire pour que ce code fonctionne correctement.

Mis à jour le 7 juillet 2009  par Yan Verdavaine

Il peut être intéressant d'avoir des icônes qui évoluent dans le temps. Par exemple, une icône dans la barre des tâches qui donne l'avancement d'un traitement. Pour animer une QIcon, il suffit de remplacer l'image à utiliser à l'instant t.

Voici trois méthodes simples.

1- Un fichier image animé (GIF, MNG…) et QMovie
  • QMovie émet un signal à chaque changement d'image.
  • Il suffit de connecter un slot qui va récupérer l'image courante de QMovie
  • L'icône peut être animée par la lecture de l'animation.
  • Il est possible de contrôler l'avancement de l'animation avec la méthode jumpToFrame().
Le bouton permet de charger une image animée
CacherSélectionnez
2- Une liste d'image
  • À chaque événement de changement d'image, on choisit l'image dans la liste.
  • Un timer permet de faire évoluer l'animation de manière constante.
Charge les images d'un répertoire dans une liste
CacherSélectionnez
3- Un QPainter
  • À chaque événement qui demande un changement de l'icône, on crée une nouvelle image avec un QPainter.
  • La plus compliquée à mettre en place mais la plus puissante.
  • La création d'une nouvelle icône peut mettre du temps.
Compose une image à partir de deux images
CacherSélectionnez
Mis à jour le 7 mai 2012  par Yan Verdavaine

Qt fournit dans son framework des icônes standards comme flèches, fichier, dossiers, lecteur DVD, corbeille, etc. La récupération de ces icônes se fait à l'aide de la classe QStyle avec la méthode suivante, permettant de récupérer l'icône choisie à partir de l'énumération StandardPixmap :

 
Sélectionnez
QIcon QStyle::standardIcon (StandardPixmap standardIcon, const QStyleOption * option = 0, const QWidget * widget = 0) const 

Exemple d'utilisation en appliquant une icône flèche sur un bouton :

 
Sélectionnez
//Création d'un contrôle ici un bouton
QPushButton button;
//On récupère un pointeur sur l'objet QStyle correspondant à l'application
QStyle* style =  QApplication::style();
//On récupère l'icône désirée, ici une flèche pointant vers le haut
QIcon iconFleche = style->standardIcon(QStyle::SP_ArrowUp);
//On applique notre icône à notre contrôle
button.setIcon(iconFleche);
Mis à jour le 7 mai 2012  par François Jaffré

Qt fournit la classe QFileIconProvider qui permet d'obtenir des icônes de fichiers identiques à celles qu'il vous est possible de trouver dans l'explorateur de votre système d'exploitation. Associé à la classe QFileInfo et/ou à l'énumération QFileIconProvider::IconType par le biais de la méthode icon(), cette classe vous permettra de récupérer un QIcon réutilisable sans problème.

 
Sélectionnez
QIcon Classe::iconForString(const QString &string)
{
    QFileInfo info(string);
    if(info.exists())
        return QFileIconProvider().icon(info);
    else
        return QFileIconProvider().icon(QFileIconProvider::File);
}

Dans ce code, nous commençons par émettre une condition vérifiant si le nom de fichier passé en tant qu'argument string de la fonction correspond bien à un chemin vers un fichier existant. Si c'est le cas, on retourne l'icône de ce fichier telle qu'on peut la voir dans l'explorateur. Dans le cas contraire, on retourne une icône à partir de l'énumération IconType.

Sous Linux, QFileIconProvider est limité aux icônes définies par IconType. Il est donc recommandé de passer par QtIconLoader si cela ne vous suffit pas.

Mis à jour le 7 mai 2012  par Louis du Verdier

Ces quatre classes sont les classes de Qt qui servent à gérer les images. Chacune a ses spécificités :

  • QImage est prévue et optimisée pour l'E/S, pour l'accès direct aux pixels et leur manipulation ; elle peut aussi être utilisée comme painter ;
  • QPixmap est prévue et optimisée pour l'affichage d'images à l'écran - elle peut d'ailleurs être utilisée comme painter ;
  • QBitmap dérive de QPixmap et n'autorise une profondeur que d'un seul bit (un QBitmap ne peut donc stocker que des images en deux couleurs - généralement, le blanc et le noir) ;
  • QPicture est un painter qui enregistre et rejoue des commandes QPainter.
Créé le 7 mai 2012  par Thibaut Cuvelier
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2006 - 2017 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.