IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Problème pour ajouter une icône à l'exécutable


Sujet :

Qt

  1. #1
    Membre averti
    Profil pro
    dev
    Inscrit en
    Avril 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Avril 2010
    Messages : 53
    Par défaut Problème pour ajouter une icône à l'exécutable
    Bonjour,

    J'utilise Qt 4.6 avec le compilateur VS2005 SP1 et le plugin Qt visual add-in sous W7. Je n'utilise pas qmake et encore moins de fichier .pro.

    J'ai ajouté une icône sous visual par l'intermédiaire du fichier .rc qui est unique et qui devrait normalement être utilisée comme icône de l'application.

    J'ai également ajouté cette icône via Qt Designer dans le fichier .qrc que j'ai associé à ma fenêtre principale via setWindowIcon(). Lorsque je fais une prévisualisation de la fenêtre principale de mon application, je retrouve bien l'icône (en haut à gauche).

    Après compilation, je retrouve bien l'icône dans l'explorer windows par contre à l'exécution c'est l'icone par défaut qui est présente à la fois dans la barre des tâches ainsi qu'en haut à gauche.

    J'ai bien essayé de changer l'icône à l'exécution par un QApplication::setWindowIcon() mais en vain...
    J'ai également retiré l'icône du fichier .qrc, laissant ainsi visual gérer complétement l'icone de l'application mais même résultat...

    Quelqu'un aurait des pistes ??

    Merci d'avance

  2. #2
    Membre averti
    Profil pro
    dev
    Inscrit en
    Avril 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Avril 2010
    Messages : 53
    Par défaut
    J'ai l'impression d'avoir à peu près tout essayé
    Personne n'a d'idée ??

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Salut,

    D'abord, je pense que tu as peu de réponse car ton environnement est un peu particulier.

    Voici quelques idées en vrac pour t'aider à progresser :
    1) As tu vérifié le contenu de ton .qrc ? Est ce qu'il est conforme à ce qui est attendu ? As tu essayé d'afficher ton image dans un QLabel par exemple (il se peut que ce soit juste un problème de mauvais chargement de l'image via le système de ressources). Essaie avec une image hors fichier de ressource.

    2) As tu essayé un QWidget::setWindowIcon sur une de tes fenêtres directement dans le code (c'est peut être un problème de designer).

    3) Peux tu nous donner plus d'infos sur ta façon de procéder pour compiler ? Tu utilises directement des makefiles ? Tu appelles directement les éxécutables Qt ? As tu bien pensé à utiliser le rcc.exe ?

    G.

  4. #4
    Membre averti
    Profil pro
    dev
    Inscrit en
    Avril 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Avril 2010
    Messages : 53
    Par défaut
    Merci pour tes remarques, cela m'a permis de valider quelques points

    1) J'ai bien vérifier le fichier .qrc, je retrouve la liste des mes icônes au format .png (qui s'affichent bien) ainsi que l'icône dédiée à l'application au format .ico.
    En essayant d'afficher l'icône sur un QLabel, je me suis aperçu que le format .ico ne devait pas être supporté par Qt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      QPixmap p("D:/qtdemo.ico");
      if (!p.isNull()) // p is null
        ui->label->setPixmap(p);
    J'ai eu la confirmation ici:
    http://qt.developpez.com/doc/latest/...p.html#details
    Mais cela me semble pour le moins étrange que Qt ne gère pas en natif le format .ico
    Cela passe effectivement si j'utilise le format .png. Ce n'est donc pas un problème lié à la lecture du fichier de ressource.

    2) oui et ça ne fonctionne pas pour les même raisons.

    3) Je n'utilise aucun makefile mais directement les exécutables Qt en prebuild event. A vrai dire, sous visual, je pensais que tout le monde faisait comme ça

    Conclusion Suis je contraint de transformer les fichiers .ico en .png ? (ou autres)

  5. #5
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour

    As-tu lu la doc suivante pour l'icône de l'application : http://qt.developpez.com/doc/latest/appicon.html ?
    A priori, il faut créer un fichier de ressource contenant ton icône et ayant le même nom que l'application.

    Pour utiliser une image .ico, il faut charger le plugin adéquate "qico" : http://qt.developpez.com/doc/latest/...static-plugins (je ne sais pas pourquoi le format ico est dans un plugin, peut être pour ne pas surcharger l'application avec des formats d'images peu utilisé ou plateforme-spécifique)

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Conclusion Suis je contraint de transformer les fichiers .ico en .png ? (ou autres)
    D'abord tout dépend du nombre de fichiers que tu as à transformer. Si tu en as peu, c'est sans doute la meilleure solution.

    Sinon, il y a des plugins images fournis avec Qt, qui permettent de gérer les fichiers .ico . Par contre, vu ton environnement, je ne sais pas trop comment faire pour les utiliser.

    D'autres te renseigneront surement mieux que moi sur ce sujet.

    ---Edit----

    As-tu lu la doc suivante pour l'icône de l'application : http://qt.developpez.com/doc/latest/appicon.html ?
    A priori, il faut créer un fichier de ressource contenant ton icône et ayant le même nom que l'application.
    Après compilation, je retrouve bien l'icône dans l'explorer windows par contre à l'exécution c'est l'icone par défaut qui est présente à la fois dans la barre des tâches ainsi qu'en haut à gauche.
    Une précision : l'icone qui apparait dans le coin de la fenetre et dans la barre des taches est l'icone de ton widget principal (celui de l'application est uniquement utilisé dans l'explorateur du système de fichier). Si tu as plusieurs "fenêtres principales" (sans parent), alors tu auras plusieurs objets dans ta barre des taches (avec des icones différentes).


    G.

  7. #7
    Membre averti
    Profil pro
    dev
    Inscrit en
    Avril 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Avril 2010
    Messages : 53
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    As-tu lu la doc suivante pour l'icône de l'application : http://qt.developpez.com/doc/latest/appicon.html ?
    J'avais déjà lu cette doc mais j'étais passé à côté de la dernière ligne

    If you do not use qmake, the necessary steps are: first, run the rc program on the .rc file, then link your application with the resulting .res file.
    Ce que j'ai testé en ajoutant un build event dans le fichier .qrc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    START /D "$(FrameworkSDKDir)" /WAIT /B RC.exe /r $(InputDir)MyAppli.rc
    et linker avec le fichier .res résultant. Mais comme mentionné dans la doc, le but de cette opération n'est que d'ajouter une icône dans l'explorateur window mais pas à l'exécution de l'appli Or, j'avais déjà ça juste en utilsant un fichier .rc. Je ne comprend pas très bien la nécessité de cette étape.

    Et effectivement, je trouve ça un peu lourd de passer par un plugin pour charger une unique icône.

    Citation Envoyé par Gulish Voir le message
    D'abord tout dépend du nombre de fichiers que tu as à transformer. Si tu en as peu, c'est sans doute la meilleure solution.
    Je n'ai que l'icône principale de l'appli. C'est donc ce que j'ai fait pour l'instant mais je suis pointilleux et je préfère utiliser la bonne méthode

    Citation Envoyé par Gulish Voir le message
    Une précision : l'icone qui apparait dans le coin de la fenetre et dans la barre des taches est l'icone de ton widget principal (celui de l'application est uniquement utilisé dans l'explorateur du système de fichier)
    Je pensais pouvoir trouver une méthode pour faire un setWindowIcon() en utilisant l'icône incluse dans le fichier .rc (ou .res). Or dans ce fichier, l'icône est probablement toujours au format .ico, il me faudra donc quand même utiliser le plugin. Si c'est le cas, je préfère encore faire une duplication du fichier .ico en .png.

    Je me suis peut-être mal exprimé, pour l'icône dans l'explorer c'est bon mais je cherchais un moyen d'utiliser cette même icône, sans la dupliquer ou sans utiliser de plugin.

  8. #8
    Membre averti
    Profil pro
    dev
    Inscrit en
    Avril 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Avril 2010
    Messages : 53
    Par défaut
    Citation Envoyé par Gulish Voir le message
    Une précision : l'icône qui apparait dans le coin de la fenêtre et dans la barre des taches est l'icône de ton widget principal (celui de l'application est uniquement utilisé dans l'explorateur du système de fichier).
    Je pensais donc faire un setWindowIcon() dans le constructeur de ma QMainWindow en utilisant celle de l'application

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setWindowIcon(QApplication::windowIcon());
    Mais QApplication et QMainWindow doivent être la même fenêtre car si je fais ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QApplication::setWindowIcon(icon));
    cela change l'icône de QMainWindow

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    QApplication n'est pas une fenêtre, elle n'a aucune représentation visible.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QApplication::setWindowIcon(icon));
    Ceci permet de définir l'icône par défaut de toutes les fenêtres de ton application, c'est pour ça que ta MainWindow récupère cette icône.

    G.

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Dsl, j'ai pas compris ton problème...
    C'est la lecture d'un fichier .ico qui marche pas???
    Les fichier ico sont lue grâce à un plugin. Tu as peut être des problèmes de path pour que ton appli trouve ce plugin.

  11. #11
    Membre averti
    Profil pro
    dev
    Inscrit en
    Avril 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Avril 2010
    Messages : 53
    Par défaut
    Citation Envoyé par Gulish Voir le message
    Ceci permet de définir l'icône par défaut de toutes les fenêtres de ton application
    Du coup j'ai ajouté la ligne qui va bien dans le constructeur de la QMainWindow

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QApplication::setWindowIcon(windowIcon());
    Merci

  12. #12
    Membre averti
    Profil pro
    dev
    Inscrit en
    Avril 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Avril 2010
    Messages : 53
    Par défaut
    Citation Envoyé par yan Voir le message
    Dsl, j'ai pas compris ton problème...
    J'ai bien compris qu'il fallait utiliser un plugin pour lire les .ico.
    Comme je trouve ça plutôt lourd car pour l'instant, je charge seulement une unique icône, celle de l'application, je l'ai donc dupliquée au format .png, ajouté au ressources .qrc. Ainsi dans QtDesigner, je peux assigner l'icône au format .png à la QMainWindow.

    Côté Visual, j'ai ajouté une icône au format .ico dans les ressources du fichier .rc afin de disposer d'une icône dans l'explorer.

    Ma question est de savoir s'il était possible à Qt à l'exécution du programme, d'aller chercher une icône qui se trouve dans les ressources du .rc ou de récupérer directement l'icône de l'application. Car finalement, l'icône .ico est déjà chargée puisqu'elle est vue dans l'explorer.

    Tout ceci afin d'éviter la duplication de l'icône (.ico -->> .png) et pour s'affranchir du plugin Qt du chargement de fichier .ico car Visual sait déjà le faire. Grosomodo, existe-il un lien entre les ressources Visual et Qt ? Visual peut-il faire office de plugin pour le chargement des fichier .ico ?

  13. #13
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par TaZStars Voir le message
    Tout ceci afin d'éviter la duplication de l'icône (.ico -->> .png) et pour s'affranchir du plugin Qt du chargement de fichier .ico car Visual sait déjà le faire. Grosomodo, existe-il un lien entre les ressources Visual et Qt ? Visual peut-il faire office de plugin pour le chargement des fichier .ico ?
    Quand tu me une icone à l'exe, par défaut, il n'est pas répercuté sur la fenêtre ?
    il me semblais que oui...
    Les fichier ico est un format pour windows, sous linux et mac, c'est plutôt des PNG.

  14. #14
    Membre averti
    Profil pro
    dev
    Inscrit en
    Avril 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Avril 2010
    Messages : 53
    Par défaut
    Citation Envoyé par yan Voir le message
    Quand tu me une icone à l'exe, par défaut, il n'est pas répercuté sur la fenêtre ?
    Dans mon cas, il semblerait que non car si j'enlève l'icône de la QMainWindow dans QtDesigner, l'icône de l'exe n'est pas répercutée dans la fenêtre.

    Pourtant, il me semblait que c'était le cas, quelqu'un peut confirmer ?

    J'ai peut-être fait quelque chose qui empêche ça, mais quoi...

Discussions similaires

  1. [XL-2007] Problème dans une macro pour ajouter une date
    Par INFINITY100 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/05/2015, 20h28
  2. [WD16] problème pour ajouter une ligne dans la table
    Par T1929D dans le forum WinDev
    Réponses: 3
    Dernier message: 02/08/2013, 22h39
  3. Réponses: 7
    Dernier message: 25/01/2012, 14h25
  4. Des problèmes pour ajouter valeur dans une ArrayList
    Par Fused dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 07/11/2008, 16h28
  5. Réponses: 3
    Dernier message: 29/08/2003, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo