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 :

Ajouter des icônes dans un QAbstractItemView


Sujet :

Qt

  1. #1
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut Ajouter des icônes dans un QAbstractItemView
    Bonjour,

    Dans le cadre d'un projet, j'ai besoin d'ajouter des icônes dans un QAbstractItemView en plus du texte qui est ajouté lors de la définition d'un QCompleter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    classesCompleter = new QCompleter(classes, this);
    // L'argument classes correspondant à un QStringList.
    Le QAbstractItemView est récupéré par classesCompleter->popup() et c'est en fait cela que je cherche à modifier en ajoutant des icônes. J'ai beau faire des recherches, je ne trouve rien d'approprié à mon problème, je sais toutefois que c'est possible, ni plus ni moins.

    Merci d'avance de votre aide,
    Amnell.
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  2. #2
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    Quel dérivé de QAbstractItemView récupères tu ? (regarde la fonction setPopup pour modifier ça)

    Si c'est un QListView, la méthode setViewMode() permet d'activer la prise en charge des icônes.

    Reste à savoir comment tu associe un icone à chaque entrée.
    Un clavier Azerty en vaut deux.

  3. #3
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    Alors j'ai utilisé setPopup() de manière à avoir un QListView en tant que popup. Toutefois, setViewMode() n'est pas très intéressant car il permet ne fait que changer le type d'affichage. Comme ce que je souhaite réaliser est comme ceci :

    __
    |_| Texte
    __
    |_| Texte

    ...

    J'ai plutôt intérêt à laisser par défaut (dans le schéma ci-dessus, les carrés représentent les icônes).
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  4. #4
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    Je te dis ça parce que par défaut, le QListView est en mode text, et non pas en mode text + icon.

    Doc de QListView :
    Items in a list view can be displayed using one of two view modes: In ListMode, the items are displayed in the form of a simple list; in IconMode, the list view takes the form of an icon view in which the items are displayed with icons like files in a file manager. By default, the list view is in ListMode. To change the view mode, use the setViewMode() function, and to determine the current view mode, use viewMode().
    Mais même une fois ceci changé, il faut trouver comment associer une icone à un item du modèle.

    Si le modèle est un QDirModel ou un QFileSystemModel, les icones sont automatiquement déterminés (bien qu'ils puissent être permutés via setIconProvider et la classe QFileIconProvider). Mais je doute que ce soit ton cas.
    Un clavier Azerty en vaut deux.

  5. #5
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    Non, je ne me sers pas de ce type de modèles.
    En fait, je serais bien passé par QListWidget plutôt que QListView mais le problème est qu'à l'affichage de la complétition, on a ceci :



    Même si je tente d'agrandir la popup, ça ne change rien, elle en est juste décalée, même si elle contient toujours les informations de la complétition.
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Pour ajouter une icone, c'est plutôt le model qu'il faut regarder. Il doit retourner une icone pour le role QT:ecorationRole dans la fonction data

  7. #7
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    Retourner ne me sert pas à grand chose, ce que je voudrais plutôt est stocker.
    classesCompleter->popup()->model() retourne le model, tout comme view->model(), avec view le QListView qui sert de popup au completer.

    En bref, ce qu'il faudrait faire est view->model()->setData(something) ?
    Mais comment et avec quoi ?

    Merci d'avance,
    Amnell.
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par zAmnellL Voir le message
    Retourner ne me sert pas à grand chose, ce que je voudrais plutôt est stocker.
    ?? stocker quoi???
    tu veut pas afficher des icones dans une list?

  9. #9
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    Justement, stocker des icônes dans la liste.

    Au passage, si vous savez vous servir de cflags, je vous serais très reconnaissant de passer ici.
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par zAmnellL Voir le message
    Justement, stocker des icônes dans la liste.
    Dsl mais je ne comprend pas ce que tu veut faire alors...

  11. #11
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    J'aimerai avoir une icône devant chaque nom de classe (une icône par ligne) :
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  12. #12
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Dans c'est bien ce que je dit. Ton model doit retourner l'icone à utiliser par la fonction data et lorsque le role == Qt:: DecorationRole.
    Quel model utilise tu?

    http://qt.developpez.com/doc/4.5/mod...el/#item-roles

  13. #13
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    J'utilise un QListView. Pour le model, je n'en ai pas créé un, je peux donc faire un setModel à tout moment.
    Pour setData, on peut stocker une QIcon dans un QVariant ?
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  14. #14
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par zAmnellL Voir le message
    J'utilise un QListView. Pour le model, je n'en ai pas créé un, je peux donc faire un setModel à tout moment.
    Si tu ne veut pas faire ton model,
    regarde qstandarditemmodel


    Citation Envoyé par zAmnellL Voir le message
    on peut stocker une QIcon dans un QVariant ?
    oui

  15. #15
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    J'ai fais quelques tentatives avec QStandardItemModel mais il s'avère que passer par ceci empêchera la complétition de s'effectuer correctement car dans ce cas-ci, pour éviter les doublons, je devrais passer par un QCompleter sans la liste de mots. Ainsi, je me rabat sur setData() mais... et bien je n'arrive pas à trouver quoi mettre comme argument dedans pour avoir l'icône et le texte pour chaque élément. Ce serait quelque chose de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(int i = 0; i < classesCompleter->popup()->model()->rowCount(); i++)
    classesCompleter->popup()->model()->setData(...);
    Si ça peut aider, j'ai un QStringList contenant tous les mots utilisés dans la complétition mais je ne pense pas qu'il faille s'en servir.
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  16. #16
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Regarde bien la partie sur Model programming et le lien que j'ai donné. Voici un exemple simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #include <QtGui>
     
     
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
     
     
        QStringList l;
        for(int i =0; i <10000;++i)
            l << QString::number(i);
     
        QStandardItemModel *  model = new QStandardItemModel;
        foreach(const QString & s,l)
        {
            QStandardItem * it = new QStandardItem;
            //string à afficher
            it->setData(s,Qt::DisplayRole);
            QPixmap icon(10,10);
            icon.fill(QColor(qrand()%256,qrand()%256,qrand()%256));
            //icone à afficher à coté de la string
            it->setData(icon,Qt::DecorationRole);
     
            model->appendRow(it);
        }
     
     
        QLineEdit w;
        QCompleter * c = new QCompleter(&w);
        c->setModel(model);
        w.setCompleter(c);
        w.show();
        return a.exec();
    }

  17. #17
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    Merci beaucoup, sujet résolu !
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  18. #18
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    Merci pour le bout de code yan, ça m'intéressait bien de savoir comment ajouter des données spéciales à un modèle =)
    Un clavier Azerty en vaut deux.

  19. #19
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Niak74 Voir le message
    Merci pour le bout de code yan, ça m'intéressait bien de savoir comment ajouter des données spéciales à un modèle =)
    La doc est très bien faite.
    Par ordre d'importance :

    1- comprendre qu'es ce qu'un role et comment c'est utilisée avec data et setDate:
    http://qt.developpez.com/doc/4.5/mod...el/#item-roles
    Avec çà, on peut déjà choisir et utiliser la plupart des models. Que ce soit les les versions widgetItem on non.

    2- comment créer son model : http://qt.developpez.com/doc/4.5/mod...eating-models/.
    Permet d'avoir plus de contrôle sur l'affichage. Depend du problème

    3-les delegates : http://qt.developpez.com/doc/4.5/model-view-delegate/
    Et là tu fait ce que tu veut.

    Après y as encore plein de chose comme les proxy item et autre. Tous est expliqué ici :
    http://qt.developpez.com/doc/4.5/mod...w-programming/

  20. #20
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    Thanks ^^
    Un clavier Azerty en vaut deux.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. ajouter des icônes dans une application
    Par d'Oursse dans le forum Windows
    Réponses: 5
    Dernier message: 30/10/2010, 09h29
  2. [Tableaux]Ajouter des valeurs dans un tableau
    Par Antoine1183 dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 03/04/2005, 13h41
  3. Ajouter des chemins dans la variable PATH
    Par Righetto Dominique dans le forum Linux
    Réponses: 7
    Dernier message: 21/03/2004, 17h38
  4. [VBA-E] Ajouter des fonctions dans Excel
    Par Clezio dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/03/2004, 01h18
  5. Ajouter des contrôles dans la palette des contrôles.
    Par WOLO Laurent dans le forum MFC
    Réponses: 4
    Dernier message: 22/01/2004, 08h27

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