Salut,
C'est parti, je me jette à l'eau 
2.1 QtCore
2.1.3 QLibrary
Q: Qu'est-ce?
R: QLibrary permet de charger de façon multi-plateforme une bibliothèque dynamique, ainsi que d'en récupérer des pointeurs vers les fonctions exportées.
Q: Comment s'en servir?
R: Après avoir créé un objet de ce type, il faut spécifier le nom de la bibliothèque dynamique à associer *sans préciser l'extension* (ce n'est plus multi-plateforme sinon
). Il suffit ensuite d'appeler resolve() en fournissant le nom du symbole à trouver. Il est retourné en tant que void*, donc un cast sera bien évidemment nécessaire. Sont aussi fournies des fonctions statiques évitant l'instanciation dans le cas où on ne voudrait récupérer qu'un symbole.
Par exemple, admettons qu'une fonction d'une bibliothéque permette de compter le nombre de lettre dans un mot:
1 2 3 4 5
| typedef int (*StringLength)(char*); // définition du type de fonction
QLibrary lib("string_util"); // création d'un objet QLibrary lié à string_util (.dll, .so ou autre)
StringLength strLength = (StringLength)lib.resolve("strlen"); // récupération d'un pointeur sur notre fonction partagée
if(strLength)
strLength("QLibrary"); // devrait renvoyer 9... si tout va bien ;) |
2.2 QtGui
Q: Comment afficher une image dans mon interface?
R: La méthode la plus simple est d'utiliser un QLabel conjointement à un QPixmap.
Voici 2 exemples:
> L'image à afficher est externe:
1 2
| QLabel *lbl = new QLabel(parent);
lbl->setPixmap(QPixmap("media/image.png")); // où media serait un sous répertoire du répertoire d'exécution |
> L'image est une ressource:
lbl->setPixmap(QPixmap(":/image.png"));
2.2.1 QDesktopServices
Q: Comment ouvrir un document (ou autre) avec l'application associée par défaut?
R: La classe QDesktopServices est là pour répondre à ce besoin. Elle peut etre étendue si nécessaire pour ajouter ses propres handlers pour un schéma donné.
Voici quelques exemples d'utilisation de cette classe:
> Ouvrir un document .cpp:
QDesktopServices::openUrl(QUrl::fromLocalFile("/path/to/fichier.cpp"));
> Créer un mail dans le client mail par défaut (l'envoi reste manuel):
QDesktopServices::openUrl(QString("mailto:destinataire@domaine.extension?subject=sujet"));
Partager