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 :

QTreeView + affichage

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Par défaut QTreeView + affichage
    Bonjour,

    Je souhaiterais faire un QTreeView et en cliquant sur un item de l'arbre, une fenêtre s'affiche a coter avec le contenu ( et non pas l'intitulé ) de l'item.
    Par exemple, dans un IDE, il y a une fenêtre sur la gauche sous forme d'arbre avec blablabla.cpp blablabla.h et lorsque je clique sur l'un ou l'autre j'ai le contenu du fichier qui apparait à droite. Je ne vois pas comment relier ces deux "fenêtres".
    Pour l'instant j'ai fais ceci mais je ne sais pas comment aller plus loin:

    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
    modele_Cours = new QStandardItemModel;
     
        item_NombresRelatif = new QStandardItem("I - Nombres relatifs");
        item_NombresRelatif->setEditable(false);
        item_Definition = new QStandardItem("Définition et méthode de calcul");
        item_Definition->setEditable(false);
        item_Exemple = new QStandardItem("Exemples");
        item_Exemple->setEditable(false);
        item_Signe = new QStandardItem("Problèmes de signes");
        item_Signe->setEditable(false);
     
        modele_Cours->appendRow(item_NombresRelatif);
        item_NombresRelatif->appendRow(item_Definition);
        item_NombresRelatif->appendRow(item_Exemple);
        item_NombresRelatif->appendRow(item_Signe);
     
        vue_Cours = new QTreeView;
        vue_Cours->header()->hide();
        vue_Cours->setModel(modele_Cours);
     
       button_Affichage = new QPushButton("Afficher le cours");
     
        layout->addWidget(vue_Cours);
        layout->addWidget(button_Affichage);
     
        setLayout(layout);
     
        connect(button_Affichage,SIGNAL(clicked()),this,SLOT(ouvrirSelection()));
    Merci de vos futures réponses.

  2. #2
    Membre très actif
    Avatar de FloMo
    Homme Profil pro
    Freelance iOS
    Inscrit en
    Juillet 2004
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Freelance iOS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 726
    Par défaut
    QTreeView à un signal appelé clicked(const QModelIndex & index).

    Il suffit donc d'implémenter le slot correspondant et faire appel à itemFromIndex(const QModelIndex & index) du QStandardItemModel afin de récupérer la valeur du QStandardItem requis.

    J'ai fait un petit exemple pour vérifier si ça fonctionne :

    Code Tree.h : 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
     
    #ifndef TREE_H
    #define TREE_H
     
    #include <QtGui>
     
    class Tree
        : public QTreeView
    {
        Q_OBJECT
     
        public:
            Tree(QWidget *parent = 0);
     
        private slots:
            void on_coursTree_clicked(const QModelIndex &index);
     
        private:
            QTreeView *coursTree;
            QStandardItemModel *coursModel;
            QStandardItem *nbRelatifs;
            QStringList nbRelatifsList;
    };
     
    #endif /* TREE_H */


    Code Tree.cpp : 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 "Tree.h"
     
    Tree::Tree(QWidget *parent)
        : QTreeView(parent)
    {
        setWindowTitle(tr("Cours"));
     
        coursModel = new QStandardItemModel;
     
        nbRelatifs = new QStandardItem("I - Nombres relatifs");
     
        coursModel->appendRow(nbRelatifs);
     
        nbRelatifsList << tr("Définition et méthode de calcul") << tr("Exemples") << tr("Problèmes de signes");
     
        QString item;
     
        foreach (item, nbRelatifsList)
            nbRelatifs->appendRow(new QStandardItem(item));
     
        setEditTriggers(QAbstractItemView::NoEditTriggers);
     
        setModel(coursModel);
     
        connect(this, SIGNAL(clicked(const QModelIndex &)), this, SLOT(on_coursTree_clicked(const QModelIndex &)));
     
        header()->hide();
    }
     
    void Tree::on_coursTree_clicked(const QModelIndex &index)
    {
        QString cours = coursModel->itemFromIndex(index)->text();
        QMessageBox::information(this, tr("Sélection"), tr("Le cours sélectionné est ") + cours + tr("."));
    }

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Par défaut
    Oui sa j'arrive à le faire mais ce n'est pas à cela que je souhaite arriver.

    Je voudrais en gros visualiser le contenu du fichier "exemple" ou du fichier "définition" et ne pas voir l'item que j'ai sélectionné.

    Alors peut etre que quelque chose m'échappe mais sinon ....

    Merci

  4. #4
    Membre très actif
    Avatar de FloMo
    Homme Profil pro
    Freelance iOS
    Inscrit en
    Juillet 2004
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Freelance iOS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 726
    Par défaut
    Je ne suis pas sûr d'avoir bien compris.

    En fait, tu veux à gauche le menu sous forme de TreeView et à droite le contenu lié à la sélection ?

    Si ce n'est pas ça, envoie un schéma.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Par défaut
    oui tout à fait le contenu en fonction de la sélection.

  6. #6
    Membre très actif
    Avatar de FloMo
    Homme Profil pro
    Freelance iOS
    Inscrit en
    Juillet 2004
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Freelance iOS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 726
    Par défaut
    J'espère que ceci va t'aider. L'idée est d'avoir à gauche un menu dépliant et à droite le contenu associé. (je n'ai mis que des noms de fichiers textes)

    L'idéal serait d'utiliser une base de données type SQLite ou un fichier XML.

    Code Tree.h : 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
     
    #ifndef TREE_H                          
    #define TREE_H                          
     
    #include <QtGui>                        
     
    class Tree                              
        : public QMainWindow                
    {           
            Q_OBJECT                        
     
            public:
                Tree(QWidget *parent = 0);  
     
            private slots:                  
                void on_coursTree_clicked(const QModelIndex &index);
     
            private:                        
                QTreeView *coursTree;
                QStandardItemModel *coursModel;  
                QStandardItem *nbRelatifs;  
                QList<QPair<QString, QString> > nbRelatifsList;
                QTextEdit *textArea;        
    };


    Code Tree.cpp : 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
     
    #include "Tree.h"
     
    Tree::Tree(QWidget *parent)
            : QMainWindow(parent)
    {
        setWindowTitle(tr("Cours"));
     
        QHBoxLayout *layout = new QHBoxLayout;
     
        coursTree = new QTreeView(this);
        coursModel = new QStandardItemModel;
     
        nbRelatifs = new QStandardItem("I - Nombres relatifs");
     
        coursModel->appendRow(nbRelatifs);
     
        for(int i = 0;i < 5;i++) {
            QPair<QString, QString> p("Titre " + QString::number(i), "fichier"+ QString::number(i)+".txt");
            nbRelatifsList.append(p);
        }
     
        QPair<QString, QString> item;
     
        foreach (item, nbRelatifsList) {
            QStandardItem *sitem = new QStandardItem(item.first);
            sitem->setData(item.second);
            nbRelatifs->appendRow(sitem);
        }
     
        coursTree->setEditTriggers(QAbstractItemView::NoEditTriggers);
     
        coursTree->setModel(coursModel);
        connect(coursTree, SIGNAL(clicked(const QModelIndex &)), this, SLOT(on_coursTree_clicked(const QModelIndex &)));
     
        coursTree->header()->hide();
     
        layout->addWidget(coursTree);
     
        textArea = new QTextEdit;
        layout->addWidget(textArea);
     
        setCentralWidget(new QWidget);
        centralWidget()->setLayout(layout);
    }
     
    void Tree::on_coursTree_clicked(const QModelIndex &index)
    {
        QString fichier = coursModel->itemFromIndex(index)->data().toString();
     
        textArea->setText(fichier);
    }

Discussions similaires

  1. [QtGui] Affichage optimal d'une arborescence (QTreeView) ?
    Par Thyxx dans le forum PyQt
    Réponses: 6
    Dernier message: 11/07/2014, 11h03
  2. QTreeView dans QMainWindow : problème d'affichage
    Par Aleph69 dans le forum Débuter
    Réponses: 1
    Dernier message: 01/09/2010, 23h37
  3. Problème Affichage QTreeView
    Par sardik dans le forum Qt
    Réponses: 2
    Dernier message: 27/03/2009, 12h44
  4. Pb affichage avec un PaintBox (pour eviter scintillement)
    Par juan64 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/04/2004, 09h21
  5. Affichage en passant par un buffer...
    Par Sirotilc dans le forum MFC
    Réponses: 5
    Dernier message: 27/05/2002, 21h00

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