FAQ Qt
FAQ QtConsultez toutes les FAQ
Nombre d'auteurs : 26, nombre de questions : 298, dernière mise à jour : 15 juin 2021
La 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
) const
Exemple 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.