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 :

Définir des délégués

  1. #1
    Membre du Club
    Homme Profil pro
    Etudiant-Benevole pour Electronic-MasterX
    Inscrit en
    Janvier 2015
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Islande

    Informations professionnelles :
    Activité : Etudiant-Benevole pour Electronic-MasterX
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2015
    Messages : 70
    Points : 44
    Points
    44
    Par défaut Définir des délégués
    bonjour,

    j'ai une simple architecture MVC avec un QStandardItemModel et une QtableView.

    je voudrais definir des comportements spéciaux pour tous les éléments de la colonne 1 et je ne sais pas comment faire.

    j'ai pensé à faire définir un delegate mais le truc est que les delegates sont définis pour tous les items du modèle alors que moi je voudrais seulement les restreindre à la colonne 1.

    Comment puis je faire? merci de me répondre

  2. #2
    Membre du Club
    Homme Profil pro
    Etudiant-Benevole pour Electronic-MasterX
    Inscrit en
    Janvier 2015
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Islande

    Informations professionnelles :
    Activité : Etudiant-Benevole pour Electronic-MasterX
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2015
    Messages : 70
    Points : 44
    Points
    44
    Par défaut
    j'ai trouvé.


    avec void QAbstractItemView::setItemDelegateForColumn(int column, QAbstractItemDelegate *delegate)


    merci de votre attention

  3. #3
    Membre du Club
    Homme Profil pro
    Etudiant-Benevole pour Electronic-MasterX
    Inscrit en
    Janvier 2015
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Islande

    Informations professionnelles :
    Activité : Etudiant-Benevole pour Electronic-MasterX
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2015
    Messages : 70
    Points : 44
    Points
    44
    Par défaut
    Bon en fait je croyais avoir trouvé mais ce n'est vraiment pas le code. voici le code que j'ai implémenté et qui fonctionne aussi bien que pas.

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    #include "test.h"
    #include"modeltest.h"
    //Test::Test(QWidget *parent) : QWidget(parent) {}
     
     
    /*
     *Classe qui  contient
     * la tabView
     */
     
    Test::Test() : QWidget()
    {
         QStandardItemModel *model = new QStandardItemModel(0, 2);
        QStringList list;
        list << "france" << "Angleterre" << "Allemagne"  << "Italie";
        for(int row = 0; row<4; ++row)
        {
            model->setItem(row, 0, new QStandardItem(static_cast<QString>(list.at(row))));
        }
        QTableView *table = new QTableView;
        table->setModel(model);
        ModelTest *delegate;
        table->setItemDelegateForColumn(0, delegate);
        QVBoxLayout *vlayout = new QVBoxLayout;
        vlayout->addWidget(table);
        setLayout(vlayout);
     }
     
     
     
     
    /*Header de la classe
     * qui met en place
     *le delegate
     */
     
     
     
    #ifndef MODELTEST_H
    #define MODELTEST_H
     
    #include <QtWidgets>
    #include<QObject>
     
    class ModelTest : public QItemDelegate
    {
        Q_OBJECT
    public:
        ModelTest(QObject *parent = 0);
     
    public:
        QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
        void setEditorData(QWidget *editor, const QModelIndex &index) const;
    //    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
        void updateEditorGeometry(QWidget *editor, QStyleOptionViewItem &option, const QModelIndex &index) const;
    };
     
    #endif // MODELTEST_H
     
     
     
     
     
     
     
    /*.cpp de la classe 
     *met en place le 
     *delegate
     */
     
    #include "modeltest.h"
     
    ModelTest::ModelTest(QObject *parent) : QItemDelegate(parent)
    {
    }
     
    QWidget *ModelTest::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
    {
     
        QSplitter *splitter = new QSplitter;
     
        return splitter;
     
    }
    void ModelTest::setEditorData(QWidget *editor, const QModelIndex &index) const
    {
        QStringList list;
        QStringList list2;
        list<< "cameroun" << "tchad" << "congo";
        list2 << "ivoire" << "argent" << "pain";
        QStandardItemModel *model = new QStandardItemModel;
        QStandardItem *parent1 = new QStandardItem("Pays");
        for(int row =0; row<3; ++row)
        {
            parent1->appendRow(new QStandardItem(static_cast<QString>(list.at(row))));
        }
        QStandardItem *parent2 = new QStandardItem("Monnaie");
        for(int row =0; row<3; ++row)
        {
            parent2->appendRow(new QStandardItem(static_cast<QString>(list2.at(row))));
        }
        model->setItem(0, 0, parent1);
        model->setItem(1, 0, parent1);
        QTreeView *tree = new QTreeView(static_cast<QSplitter*>(editor));
        tree->setModel(model);
    }
    void ModelTest::updateEditorGeometry(QWidget *editor, QStyleOptionViewItem &option, const QModelIndex &index) const
    {
        editor->setGeometry(option.rect);
     
    }
    En fait le code compile et s'execute mais rien ne se passe comme si je n'avais défini aucun delegate

  4. #4
    Membre du Club
    Homme Profil pro
    Etudiant-Benevole pour Electronic-MasterX
    Inscrit en
    Janvier 2015
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Islande

    Informations professionnelles :
    Activité : Etudiant-Benevole pour Electronic-MasterX
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2015
    Messages : 70
    Points : 44
    Points
    44
    Par défaut
    j'ai résolu mon problème. je mets mon code pour qu'ils etre utile à ceux qui tomberont dessus.

    je mets juste le code du .cpp de ma classe qui va réimplémenter le Delegate. pour les intéréssés si vous comparez avec mon précédent code vous verrez facilement ce que j'ai changé. Gambadehhhhhhh!!!!! Mina

    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
    36
    37
    38
    39
    40
    41
    42
    ModelTest::ModelTest(QObject *parent) : QStyledItemDelegate(parent)
    {
    }
     
    QWidget *ModelTest::createEditor(QWidget *parent, const QStyleOptionViewItem &/*option*/, const QModelIndex &/*index*/) const
    {
     
        QSplitter *splitter = new QSplitter(parent);
        return splitter;
     
    }
    void ModelTest::setEditorData(QWidget *editor, const QModelIndex &/*index*/) const
    {
        QStringList list;
        QStringList list2;
        list<< "Bilbao" << "Uruguay" << "Chili";
        list2 << "ivoire" << "argent" << "pain";
        QStandardItemModel *model = new QStandardItemModel;
        QStandardItem *parent1 = new QStandardItem("Pays");
        for(int row =0; row<3; ++row)
        {
            parent1->appendRow(new QStandardItem(static_cast<QString>(list.at(row))));
        }
        QStandardItem *parent2 = new QStandardItem("Monnaie");
        for(int row =0; row<3; ++row)
        {
            parent2->appendRow(new QStandardItem(static_cast<QString>(list2.at(row))));
        }
        model->setItem(0, 0, parent1);
        model->setItem(1, 0, parent2);
        QTreeView *tree = new QTreeView(static_cast<QSplitter*>(editor));
           tree->setModel(model);
     
       }
    void ModelTest::setModelData(QWidget */*editor*/, QAbstractItemModel */*model*/, const QModelIndex &/*index*/) const
    {
    }
    void ModelTest::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex & /*index*/ ) const
    {
        editor->setGeometry(60, 40, 300, 150);
     
    }

Discussions similaires

  1. Définir des variables
    Par rane dans le forum Langage
    Réponses: 11
    Dernier message: 10/05/2006, 19h02
  2. Comment définir des raccourcis clavier ?
    Par st0nky dans le forum Composants VCL
    Réponses: 3
    Dernier message: 07/12/2005, 20h37
  3. Réponses: 2
    Dernier message: 18/11/2005, 21h40
  4. [Tomcat][Role] définir des roles a partir d'un certificat
    Par pmartin8 dans le forum Tomcat et TomEE
    Réponses: 8
    Dernier message: 27/09/2005, 20h25
  5. [FLASH MX2004 ] Définir des "zones cliquables"
    Par chodaboy34 dans le forum Flash
    Réponses: 3
    Dernier message: 07/11/2004, 18h58

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