FAQ Qt

FAQ QtConsultez toutes les FAQ
Nombre d'auteurs : 26, nombre de questions : 298, dernière mise à jour : 15 juin 2021
Sommaire→Modules→Qt GUI et Qt Widgets→Généralités→Images/icônesLa méthode la plus simple est d'utiliser un QLabel conjointement à un QPixmap.
#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();
}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.
#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.
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.
- 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().
- À 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.
- À 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.
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 :
QIcon QStyle::standardIcon (StandardPixmap standardIcon, const QStyleOption * option = 0, const QWidget * widget = 0) constExemple d'utilisation en appliquant une icône flèche sur un bouton :
//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);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.
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.
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.






