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.