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 :

QListView et modèle personnalisé


Sujet :

Qt

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 37
    Par défaut QListView et modèle personnalisé
    Bonjour a tous et a toutes.

    J'ai pour but de creer une listview de strings. J'ai donc cree une classe
    StringListModel heritant de QAbstractListModel comme ceci :

    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
     
    class StringListModel : public QAbstractListModel
    {
        Q_OBJECT
     
    public:
        explicit StringListModel(QObject *parent = 0);
        int					rowCount(const QModelIndex&) const;
        QVariant				data(QModelIndex const &, int) const;
        Qt::ItemFlags			flags(QModelIndex const &) const;
     
    private:
        QStringList                      string_list;
     
    };
    Tout marche tres bien, lorsque je cree ma liste dans ma mainwindow, la liste est bien chargee, et les elements sont bien presents dans ma listview.
    Mais j'aimerai y ajouter des effets de styles. Comme par exemple, garder un contour sur la selection, ou alors mettre en rouge juste la ligne selectionnee.
    aucun moyen d'y parvenir.

    Voici le .cpp :

    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
     
    StringListModel::StringListModel(QObject *parent) : QAbstractListModel(parent)
    {
        this->string_list.push_back("test");
        this->string_list.push_back("test2");
    }
     
    int                 StringListModel::rowCount(const QModelIndex& index) const
    {
        return (this->string_list.size());
    }
     
    QVariant			StringListModel::data(QModelIndex const &index, int role) const
    {
        if (Qt::DisplayRole == role)
            return (QVariant(this->string_list[index.row()]));
        return (QVariant());
    }
     
    Qt::ItemFlags		StringListModel::flags(QModelIndex const &) const
    {
        return (Qt::NoItemFlags);
    }
    Et voici ma window principale ou se charge la liste et ou je set le model

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Window::Window(QWidget *parent) : QWidget(parent)
    {
        this->setFixedSize(400, 550);
     
        this->vue_ = new QListView(this);
        this->vue_->setGeometry(10, 10, 355, 325);
     
        this->model_ = new StringListModel(this);
     
        this->vue_->setModel(this->model_);
        this->vue_->show();
    }
    Ma question est donc, que dois-je faire pour que je puisse totalement personnalisee les elements de ma liste

    par exemple :
    - mettre en noir toutes les strings de la listes.
    - mettre en rouge la string qui est selectionnee par l'utilisateur
    - ou alors rajouter une belle bordure sur la string selectionnee.

    Merci d'avances pour vos reponses.

  2. #2
    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
    Par défaut
    Bonjour,

    Avez-vous exploré la piste des "Item roles" ?



    Avec la fonction setData() des modèles, un rendu devrait pouvoir se faire.

    Bonne continuation,
    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

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 37
    Par défaut
    Je dois donc reimplementer la fonction setData et recupere le QAbstractItem lorsque l'utilisateur selectionne un element de la liste ?

    En fait je suis un peu perdu, Je trouve que sur cette partie la doc est bien expliquee mais elle manque d'exemples concrets ..

  4. #4
    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
    Par défaut
    J'avoue que j'ai quelque peu oublié comme cela fonctionnait. Quoi qu'il en soit, ces deux éléments vous seront peut-être utiles :

    http://doc.qt.nokia.com/qq/qq24-delegates.html
    http://qt.developpez.com/faq/?page=q...core-delegates
    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

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 47
    Par défaut
    Bonjour,

    Citation Envoyé par Necko Voir le message
    Je dois donc reimplementer la fonction setData et recupere le QAbstractItem lorsque l'utilisateur selectionne un element de la liste ?
    A priori, les couleurs du texte ne font pas partie du modèle, donc ce n'est pas setData qui doit les renvoyer.

    Une simple feuille de styles devrait suffire ici: http://qt.developpez.com/doc/latest/...zing-qlistview

Discussions similaires

  1. [WD-2007] modèle Word intégralement personnalisé
    Par brune59 dans le forum Word
    Réponses: 3
    Dernier message: 26/07/2012, 19h23
  2. edition personnalisé via modéle edition et champ modéle de données
    Par locs31 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 30/01/2012, 00h06
  3. Modèle/vue , modèle personnalisé
    Par Kymic dans le forum Qt
    Réponses: 4
    Dernier message: 01/08/2009, 17h15
  4. Réponses: 1
    Dernier message: 25/03/2009, 19h14

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