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

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur en électronique
    Inscrit en
    novembre 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur en électronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : novembre 2005
    Messages : 24
    Points : 20
    Points
    20
    Par défaut Comment enpêcher le passage en mode édition dans une table de type QTreeView ?
    Bonjour

    Je développe une application avec QT4.3.2 sous linux. Dans cette application je dérive la classe QTreeView pour afficher des données. Les données sont rassemblées sous le modèle utilisant la classe QStandardItemModel. La fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void CVueOperations::createModel(CInfoCompte infoCompte)
    crée le modèle pour les données à afficher. Pour me faire comprendre je joins le code ci-dessous.
    Tout d'abord le fichier .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
    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
    #include <QtGui>
     
    #include "DomComptes.h"
    #include "InfoOperation.h"
    #include "VueOperations.h"
     
    CVueOperations::CVueOperations (CDomComptes *pComptes)
    {
    	if (pComptes != 0) {
     
    		m_pComptes = pComptes;
     
    		setRootIsDecorated(false);
    		setAlternatingRowColors(true);
    		setSortingEnabled(true);
    	}
    }
     
    void CVueOperations::updateVueOperations(CInfoCompte infoCompte)
    {
    	int i;
     
    	qDebug() << "## updateVueOperations ## 0 :" << columnWidth(0);
    	qDebug() << "## updateVueOperations ## 1 :" << columnWidth(1);
    	qDebug() << "## updateVueOperations ## 2 :" << columnWidth(2);
    	qDebug() << "## updateVueOperations ## 3 :" << columnWidth(3);
     
    	for (i=0; i < m_ListeVueOperations.size(); i++) {
    		qDebug() << "## updateVueOperations ## : Parcours de la liste";
     
    		if (m_ListeVueOperations.at(i).m_Nom == infoCompte.nomCompte()) {
    			qDebug() << "## updateVueOperations ## : Compte trouvé";
    			setModel(m_ListeVueOperations.at(i).m_pModel);
    			setColumnWidth(0, 75);
    			setColumnWidth(1, 265);
    			setColumnWidth(2, 75);
    			setColumnWidth(3, 75);
    			return;
    		}
    	}
     
    	createModel(infoCompte);
    }
     
    void CVueOperations::createModel(CInfoCompte infoCompte)
    {
    	int 					i, j, k;
    	int						myAlignment;
    	QString				Element;				
    	QStandardItemModel 	*pModel;
    	CModelVue				modelVue;
    	CInfoOperation 		infoOperation;
     
    	qDebug() << "## createModel ## : Création du modèle";
     
    	pModel = new QStandardItemModel(0, 4, this);
     
    	pModel->setHeaderData(0, Qt::Horizontal, tr("Date"));
    	pModel->setHeaderData(1, Qt::Horizontal, tr("Catégorie/Sous-catégorie"));
    	pModel->setHeaderData(2, Qt::Horizontal, tr("Débit"));
    	pModel->setHeaderData(3, Qt::Horizontal, tr("Crédit"));
     
    	i = 0;
    	m_pComptes->firstOperation(infoCompte, infoOperation);
    	while (!infoOperation.isEmpty()) {
    		qDebug() << "## createModel ## : Parcourt les opérations :" << i;
     
    		pModel->insertRow(i);
    		for(j=0; j<2; j++) {
    			switch (j) {
    				case 0 : 	Element = QString("%1").arg(infoOperation.Date().toString("dd.MM.yyyy"));
    							qDebug() << "## createModel ## : la date =" << infoOperation.Date();							
    							break;
    				case 1 :	Element = QString("%1\n     %2").arg(infoOperation.nomCategorie()).arg(infoOperation.nomSousCategorie());
    							qDebug() << "## createModel ## : la catégorie =" << Element;							
    							break;
    			}
    			pModel->setData(pModel->index(i, j), Element, Qt::DisplayRole);
    			pModel->setData(pModel->index(i, j), Qt::AlignVCenter, Qt::TextAlignmentRole);
    		}
    		myAlignment = Qt::AlignRight | Qt::AlignVCenter;
    		if (infoOperation.Valeur() <= 0) 
    			k = 2;
    		else 
    			k = 3;
    		pModel->setData(pModel->index(i, k), QString("%1").arg(infoOperation.Valeur(), 0, 'f', 2), Qt::DisplayRole);
    		pModel->setData(pModel->index(i, k), myAlignment, Qt::TextAlignmentRole);
    		i++;
    		m_pComptes->nextOperation(infoCompte, infoOperation);
    	}
     
    	modelVue.m_Nom = infoCompte.nomCompte();
    	modelVue.m_pModel = pModel;
     
    	m_ListeVueOperations.append(modelVue);
     
    	setModel(pModel);
    	setColumnWidth(0, 75);
    	setColumnWidth(1, 265);
    	setColumnWidth(2, 75);
    	setColumnWidth(3, 75);
    }
    Et maintenant le fichier .h :
    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
    #ifndef __VUE_OPERATIONS_H__
    #define __VUE_OPERATIONS_H__
     
    #include <QObject>
    #include <QTreeView>
     
    #include "InfoCompte.h"
     
    class QStandardItemModel;
    class CDomComptes;
     
    class CModelVue
    {
    	public :
    		QString 				 m_Nom;
    		QStandardItemModel	*m_pModel;
    };
     
    class CVueOperations : public QTreeView
    {
        Q_OBJECT
     
    private :
    	CDomComptes *m_pComptes;
    	QList<CModelVue> m_ListeVueOperations;
     
    public :
    	CVueOperations(CDomComptes *pComptes);
     
    public slots :
    	void updateVueOperations(CInfoCompte infoCompte);
     
    private :
    	void createModel(CInfoCompte infoCompte);
     
    };
     
    #endif
    1ère question :
    Même quand j'ajoute le paramètre
    dans les appels de fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pModel->setData(pModel->index(i, j), Element, Qt::DisplayRole);
    Si je double clique sur un élément d'une ligne du tableau il passe en mode édition : ce que je ne veux absolument pas. Je veux que la table soit en lecture seule, aucune modification ne doit être possible.
    Pourquoi le paramètre est sans effet ? Comment faut-il faire pour avoir une table où aucun élément ne puisse être édité ?
    Le mode lecture seule se gère-t-il au niveau du modèle que j'utilise ou au niveau de la classe dérivée de QTreeView ? Si oui comment fait-on ?
    Faut-il gérer l'évènement double clik ? si oui comment fait-on ?
    2ème question :
    Comment supprimer le rectangle en pointillé qui apparait lorsqu'on clique sur un élement du tableau ?
    3ème question :
    Comment dessiner des lignes pour séparer les colonnes et les lignes ?

    Si je pouvais avoir des réponses à mes questions ?

    Par avance merci ..... et joyeuses fêtes.

  2. #2
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut
    1. Tu ne devrais pas ajouter tes éléments avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pModel->setData(pModel->index(i, j), Element, Qt::DisplayRole);
    Mais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    QStandardItem item (QString("%1").arg(infoOperation.Date().toString("dd.MM.yyyy"));
    pModel->setItem (item);
    item.setEditable (false);
    2. Je pense que c'est faisable en utilisant la fonction setSelectable (false).

    3. Je n'ai pas bien compris ta question .
    Omnes Vulnerant Ultima Necat
    Bye

Discussions similaires

  1. [OpenOffice][Tableur] En Basic, désactiver le mode édition dans une cellule
    Par jcc76 dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 16/06/2014, 14h52
  2. Réponses: 4
    Dernier message: 28/12/2009, 22h42
  3. Comment importer un fichier xml ou csv dans une table paradox ?
    Par pierrot67 dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/09/2007, 16h35
  4. [MySQL] Comment récupérer le nombre d'élément présent dans une table
    Par TrX314 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/04/2007, 22h20
  5. Réponses: 20
    Dernier message: 23/09/2005, 14h50

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