===== Le système de ressources de Qt ===== Le système de ressources de Qt est un mécanisme indépendant de la plateforme de stockage de fichiers binaires, dans l'exécutable de l'application. Ce système vous sera très utile si votre application nécessite en permanence un ensemble de fichiers (icônes, fichiers de traduction, etc.), pour lesquels vous ne souhaitez pas courir le risque de perdre l'un d'entre eux. ==== Introduction ==== Le système de ressources est basé sur une forte coopération entre [[qmake-manual#qmake|qmake]], le [[rcc#rcc|rcc]] (le compilateur de ressources de Qt) et [[QFile]]. Il rend obsolète l'outil ''qembed'' de Qt 3 et le mécanisme de [[http://qt.nokia.com/doc/qq/qq05-iconography.html#imagestorage|stockage d'images]]. ==== Fichiers de collecte de ressources (.qrc) ==== Les ressources associées à une application sont spécifiées dans un fichier ''.qrc'', un format de fichier basé sur le XML qui liste les fichiers sur le disque et leur assigne optionnellement un nom de ressource, que l'application doit obligatoirement utiliser pour accéder à la ressource. Voici un exemple de fichier ''.qrc'' : images/copy.png images/cut.png images/new.png images/open.png images/paste.png images/save.png Les ressources listées dans le fichier ''.qrc'' correspondent à des fichiers qui sont des parties de l'arbre des sources de l'application. Les chemins spécifiés sont relatifs au répertoire le contenant. Notez que les fichiers de ressources listées doivent être logés dans le même répertoire que celui du fichier ''.qrc'', ou dans l'un de ses sous-répertoires. Les données de ressources peuvent soit être compilées dans le binaire et par conséquent accéder immédiatement au code de l'application, ou bien une ressource binaire peut être créée et être enregistrée à un point postérieur du code de l'application, ou être enregistrée avec le système de ressources. Par défaut, les ressources sont accessibles dans l'application sous le même nom qu'ils possèdent dans l'arbre source, avec le préfixe '':/''. Par exemple, le chemin '':/images/cut.png'' donnerait un accès au fichier ''cut.png'', dont l'emplacement dans l'arbre source de l'application est ''images/cut.png''. Cela peut être changé par l'utilisation de l'attribut ''alias'' du tag ''file'' : images/cut.png Le fichier est alors accessible depuis l'application par '':/cut-img.png''. Il est aussi possible de spécifier un préfixe de chemin pour tous les fichiers du ''.qrc'' par l'utilisation de l'attribut ''prefix'' du tag ''qresource'' : images/cut.png Dans ce cas, le fichier est accessible par '':/myresources/cut-img.png''. Quelques ressources, comme les fichiers de traduction et les icônes, peuvent avoir besoin de changer en fonction de la position géographique de l'utilisateur. Cela peut être fait par l'ajout de l'attribut ''lang'' au tag ''qresource'', en spécifiant une chaine de caractères appropriée. Par exemple : cut.jpg cut_fr.jpg Si l'utilisateur est situé dans un pays francophone (donc si ''[[QLocale#system()|QLocal::system()]].name()'' retourne ''"fr_FR"'', ''"fr_CA"'', ''"fr_BE"'', en fonction du pays), '':/cut.jpg'' devient une référence à l'image cut_fr.jpg. Pour les autres lieux, ''cut.jpg'' est utilisé. Voir la documentation de [[QLocale]] pour une description du format à utiliser pour les chaînes de caractères de lieu. ==== Ressources binaires externes ==== Pour qu'une ressource binaire externe soit créée, vous devez créer les données de ressources (communément par un fichier d'extension ''.rcc'') en passant le drapeau ''-binary'' à [[rcc|rcc]]. Une fois la ressource binaire créée, vous pouvez l'enregistrer avec l'API [[QResource]]. Par exemple, un ensemble de données de ressource spécifié dans un fichier ''.qrc'' peut être compilé de la manière suivante : rcc -binary myresource.qrc -o myresource.rcc Dans l'application, cette ressource se voudrait être enregistrée avec un code tel que celui-ci : QResource::registerResource("/path/to/myresource.rcc"); ==== Ressources internes compilées ==== Pour qu'une ressource soit compilée dans le binaire, le fichier ''.qrc'' doit obligatoirement être mentionné dans le fichier ''.pro'' de l'application pour que [[doc:4.6:le_manuel_de_qmake|qmake]] prenne connaissance de son existence. Par exemple : RESOURCES = application.qrc ''qmake'' produira des règles de compilation pour générer un fichier appelé ''qrc_application.cpp'', lié dans l'application. Ce fichier contiendra toutes les informations des images et des autres ressources telles que des groupes statiques de données binaires compressées. Le fichier ''qrc_application.cpp'' est généré automatiquement à chaque fois que le fichier ''.qrc'' ou l'un des fichiers auquel il réfère change. Si vous ne vous servez pas de fichiers ''.pro'', vous pouvez soit faire appel à ''rcc'' manuellement, soit ajouter des règles de compilation à votre système de compilation. {{ http://qt.developpez.com/doc/4.6/images/resources.png |}} Actuellement et à chaque fois, Qt stocke directement les données dans l'exécutable, même sous Windows ou sous Mac OS X, où le système d'exploitation fournit un support natif aux ressources. Cela peut changer dans une version future de Qt. ==== L'utilisation des ressources dans l'application ==== Dans l'application, les chemins des ressources peuvent être utilisés dans la plupart des endroits à la place de chemins ordinaires de fichiers du système. En particulier, vous pouvez passer un chemin de ressource au lieu d'un nom de fichier au constructeur de [[QIcon]], [[QImage]] ou [[QPixmap]] : cutAct = new QAction(QIcon(":/images/cut.png"), tr("Cu&t"), this); Regardez l'exemple [[mainwindows-application|Application]] pour une application actuelle qui utilise le système de ressources pour stocker ses icônes. En mémoire, les ressources sont représentées par un arbre d'objets de ressources. L'arbre est automatiquement généré au lancement et utilisé par [[QFile]] pour résoudre les chemins vers les ressources. Vous pouvez utiliser un [[QDir]] initialisé avec ":/" pour naviguer à travers l'arbre de ressources depuis la racine. Les ressources de Qt supportent le concept de liste de chemins de recherche. Si vous référez une ressource avec '':'' au lieu de '':/'' comme le préfixe, la ressource sera verrouillée en utilisant la liste de chemins. La liste de chemins de recherche est vide au démarrage ; appelez [[QDir::addSearchPath()|QDir::addSearchPath()]] pour lui ajouter un chemin. Si vous possédez des ressources dans une bibliothèque statique, il est possible que vous ayez besoin de forcer l'initialisation de vos ressources par l'appel de [[QDir::Q_INIT_RESOURCE|Q_INIT_RESOURCE()]] avec le nom de base du fichier ''.qrc''. Par exemple : int main(int argc, char *argv[]) { QApplication app(argc, argv); Q_INIT_RESOURCE(graphlib); ... return app.exec(); } D'une manière similaire, si vous devez décharger un ensemble de ressources explicitement (car un plugin est en train d'être déchargé ou bien parce que les ressources ne sont pas valides plus longtemps), vous pouvez forcer la suppression de vos ressources par l'appel de [[QDir::Q_CLEANUP_RESOURCE|Q_CLEANUP_RESOURCE()]] avec le même nom de base que celui qui est présent ci-dessus. ==== Remerciements ==== Merci à pour la traduction ainsi qu'à et à pour leur relecture !