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

Discussion :

Utilisation d'icônes standard dans une barre d'outils

  1. #1
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 676
    Points : 43 731
    Points
    43 731
    Par défaut Utilisation d'icônes standard dans une barre d'outils
    Bonjour,

    Je cherches à créer une barre d'outil avec des icones.

    voici le code de ma barre d'outil :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    QToolBar* toolbar;
    toolbar=addToolBar("test");
    QAction* test=toolbar->addAction("test",this,SLOT(sortie)));
    Ceci affiche "test" dans une barre d'outil et fonctionne.

    Reste à gérer l’icône:

    Pour mon propre icône j'ai trouvé ( je n'ai pas testé ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    QPixmap essai("essai.png");
    toolbar->addAction(QIcon(essai),"test");
    maintenant pour les icônes standard je présumes que je dois remplacer QIcon(essai) par QIcon(nom_de_l_icone_par_defaut)

    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    toolbar=addToolBar(QIcon(SP_TrashIcon),"test");
    j'ai une erreur de compilation : "'SP_TrashIcon was not declared in this scope"

    J'ai ajouté QStyle en include
    j'ai essayé aussi avec QStyle::SP_TrashIcon, cela ne fonctionne pas non plus.

    Merci pour votre aide.

  2. #2
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut
    Si tu regardes la doc, tu verras que QIcon n'a aucun constructeur qui accepte en argument ce que tu essayes de lui donner. Tu ne peux donc pas construire ton objet de cette façon.

    Dans la doc de QStyle tu trouves la fonction standardicon, qui sert justement à créer un objet QIcon comme tu souhaites le faire. Tu dois donc créer un objet QStyle puis appeler cette fonction à la place de ton appel au constructeur de QIcon.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QStyle style;
    toolbar=addToolBar(style.standardicon(SP_TrashIcon),"test");

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 676
    Points : 43 731
    Points
    43 731
    Par défaut ça ne marche pas ...
    Dans les deux cas j'ai l'erreur suivante à la compilation :

    SP_TrashIcon was not declared in this scope

    NE me manquerai t'il pas des includes ?

    j'ai QMenu, QmenuBar, QToolBar, QStyle ( + d'autres non necessaire à ce bout de code )

    Par ailleurs j'ai remplacé style.standardicon par style.StandardIcon, j'ai une erreur de moins à la compilation.

    Si je regardes la doc il n'est pas clair pour moi que ne je peux pas utiliser qIcon comme je l'ai fait, je suis débutant.

    Merci pour votre aide.

  4. #4
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut
    Autant pour moi j'ai mal copié le code !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QStyle style;
    toolbar=addToolBar(style.standardIcon(QStyle::SP_TrashIcon),"test");
    Pour ces lignes là tu ne devrais à avoir à inclure que QToolBar et QStyle.
    (+ QMenu, QmenuBar pour le reste de ton code j'imagine)

  5. #5
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 676
    Points : 43 731
    Points
    43 731
    Par défaut toujours probs de compilation
    Je suis désolé de vous enquiquiner mais c encore pas bon.

    A la compilation j'ai l'erreur ;
    cannot allocate an object of abstract type 'QStyle'

    J'ai ensuite plein de lignes note:because the following virtual functions are pure within 'QStyle', ça je l'avais déjà mais c'est marqué note, je me suis dit que c'était inutile de le préciser. Mon prob est lié je pense à mon include QStyle

    D'après ce que j'ai trouvé sur cannot allocate an object of abstract type 'QStyle', il s'agit de prob lié à l'héritage et à des classes virtuelles, moi je n'utilises pas de classes virtuelles en dehors de la "boite noire" QT Ca me parait bizarre que QT ne soit pas en mesure de gérer ça correctement donc c'est moi qui merde qq part.

    les includes que j'utilise sont : QApplication, QTGui, QLabel, QMainWindow,QMenu, QMenuBar, QToolBar,QCloseEvent, QFile,et QStyle

    Je penses que mon prob est plus lié à C++ qu'à QT vu ce que j'ai trouvé sur le net, mais j'ai ce prob depuis que je travailles sur ma partie barre d'outil donc lié à mes include QStyle, QToolbar que je n'utilisais pas avant.

    Je n'ai pas suffisamment de compétence en C++ pour corriger mon prob. En fait si je pouvais développer en C avec QT plutôt qu'en C++ ça m'arrangerait mais ça pas l'air d'être possible, j'ai rien contre C++ sauf que c'est chaud pour avancer en galérant en C++ et en QT. Je sais que je suis hors sujet en parlant C++ mais si qq1 pouvait m'aider et/ou me donner un exemple complet opérationnel pour créer une barre d'outil avec les icônes standard ce serait sympa, en attendant je vais essayer avec mes propres icônes, ce qui me permettra d'apprendre la partie gestion ressources.

    Je peux fournir mon code si besoin ( 135 lignes, ça commences à faire beaucoup à lire donc je le mettrais si indispensable, je suis en train de développer un éditeur de texte, afin d'apprendre QT il n'a donc pas d’intérêt pour qq1 d'autre que moi, et même pour apprendre, vu mon niveau ... )

    Merci pour votre aide, bonjour la galère juste pour afficher une barre d'outil, mais faut bien apprendre ...

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 20
    Points : 34
    Points
    34
    Par défaut
    Bonjour,
    Pour ton problème de "cannot allocate an object of abstract type 'QStyle'", il s'agit tout simplement d'instancier un QStyle dynamiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QStyle* style;
    QIcon icon=style->standardIcon(QStyle::SP_TrashIcon);
    A +

    EDIT : oula mais oui j'écris n'importe quoi moi (il est tôt )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QIcon icon=qApp->style()->standardIcon(QStyle::SP_TrashIcon)
    QToolBar toolbar;
    toolbar.addAction(icon,"test");
    Mieux! thx troudhyl

  7. #7
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Euh là, ça ne risque pas de marcher, tu crées un entier et tu espères qu'il pointe sur quelque chose, et en plus pas de delete.
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    toolbar = addToolBar  (style()->standardIcon ( QStyle::SP_TrashIcon ),"test" );
    Ce serait pas un truc comme ça ? QStyle n'est pas instanciable (classe abstraite), faut se servir du style() de l'application ou du widget.

  8. #8
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 676
    Points : 43 731
    Points
    43 731
    Par défaut je m'arache les cheveux
    Dwarfylo, Troudyl,

    Vos soluces ne fonctionnent pas, ou je deviens chèvre.

    Je n'es pas réussi à trouver d'exemple utilisant les icônes standards. Est-ce seulement possible;

    J'ai trouvé ceci : http://doc.trolltech.com/4.5/qaction.html#icon-prop
    Il est marqué "There is no default icon"

    Cela veut il dire que par défaut il n'y a pas d'icônes ou que il n'ya a pas d'icones par défaut

    Dans ce cas là, à quoi correspond par exemple SP_TrashIcon ?

    La doc est inbitable enfin pour moi

  9. #9
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Bon j'ai essayé, projet vide, juste la ligne que j'ai dit (j'en ai profité pour découvrir les icônes standard, je connaissais pas, pas mal). Le résultat :



    Donc ça marche, j'ai bien mon icône standard (ici de dossier, toi tu veux celle de la corbeille mais ça marche pareil).

    Au fait quand tu as un lien vers la doc comme ça, remplace la version (4.5 là) par "latest" dans l'url, pour tomber sur la dernière version de la doc (avec un joli CSS).

    Tu mélanges tout. "There is no default icon" hors contexte ça veut rien dire, là c'est écrit pour la propriété icon d'une QAction (le lien que tu donnes), effectivement quand tu crées une QAction y'a pas d'icône par défaut, ni plus ni moins... Aucun rapport avec la choucroute . SP_TrashIcon, bah apparemment QStyle permet de récupérer les icônes standards (donc en fonction du style courant de l'appli, style Vista, Mac, Plastique...). Ça c'est l'icône standard de la corbeille comme le nom l'indique, enfin c'est sa correspondance dans l'énumération des icônes standards. Parce que ces icônes dépendent du style courant (et donc de l'OS), la corbeille Mac n'a pas la même icône que la corbeille Vista ou par exemple... C'est pour ça que tu dois te servir de style(), le style courant de ton application qui renvoie les infos nécessaires pour trouver l'icône correspondant au nom standard.

  10. #10
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 676
    Points : 43 731
    Points
    43 731
    Par défaut j'ai la solution
    Voici la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    QStyle *style=QApplication::style();
    QIcon mon_icone=style->standardIcon(QStyle::SP_BrowserStop);
    QToolbar *toolbar=addToolBar("essai");
    toolbar->addAction(mon_icone,"test",this,SLOT(sortie()));
     
    public slots:
    void fermer()
    {
    QApplication::quit();
    }
    Il me manquait style=QApplication::style();

    Pour la liste des icônes dispos :
    Chercher QStyle dans QAssistant.

    Merci encore à ceux qui m'ont mis sur la piste.

  11. #11
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Ce n'est pas "la solution", c'est une façon (longue) d'écrire une solution.

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QStyle *style=QApplication::style();
    QIcon mon_icone=style->standardIcon(QStyle::SP_BrowserStop);

    Ton pointeur style (qui a le même nom qu'une méthode, risqué) tu ne t'en sers qu'une fois alors pourquoi le créer plutôt que d'utiliser directement celui que tu veux ? Enfin peut-être que tu t'en sers plusieurs fois après, soit. Mais ce code est équivalent à :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    QIcon mon_icone ( style()->standardIcon ( QStyle::SP_BrowserStop ) );
    parce que QApplication::style() c'est le même que this->style().

  12. #12
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Juste pour info se serait bien d'utiliser la FAQ

    http://qt.developpez.com/faq/?page=g...#icon-standard

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. création d'une liste dans une barre d'outils
    Par ririrourou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/09/2008, 15h39
  2. [COM] utiliser la librairie standard dans une dll COM
    Par kacedda dans le forum Visual C++
    Réponses: 5
    Dernier message: 13/03/2008, 14h57
  3. Alignement dans une barre d'outils
    Par Mysti¢ dans le forum wxPython
    Réponses: 1
    Dernier message: 19/06/2007, 15h54
  4. [Sources]Créer un bouton dans une barre d'outils
    Par ouskel'n'or dans le forum Contribuez
    Réponses: 2
    Dernier message: 19/03/2007, 12h32
  5. Un menu dans une barre d'outils Swing : possible ?
    Par nicolas54 dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 28/03/2006, 07h54

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