Bonjour,

Je développe une application avec Qt4.3.2 sous linux. Voici un extrait du 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
#include <QtGui>
 
#include "DomComptes.h"
#include "VueComptes.h"
 
CVueComptes::CVueComptes(CDomComptes *ptComptes)
{
	QTreeWidgetItem *ptItem;
 
	if (ptComptes != 0) {
 
		connect(this, SIGNAL(currentItemChanged(*ptCurrent, *ptPrevious)),this, SLOT(updateSelectedCompte(*ptCurrent, *ptPrevious)));
 
		m_ptComptes = ptComptes;
 
		setColumnCount(1);
		header()->hide();
		ptItem = new QTreeWidgetItem(this);
 
		ptItem->setText(0, tr("Livre des Comptes"));
 
		installComptes(ptItem);
	}
}
 
void CVueComptes::installComptes(QTreeWidgetItem *ptParent)
{
	QTreeWidgetItem	*ptItemCompte;
	QTreeWidgetItem 	*ptItemInfo;
	CInfoCompte		infoCompte;
 
	m_ptComptes->firstCompte(infoCompte);
	while (!infoCompte.isEmpty()) {
		qDebug() << "## Fonction installComptes ## : " << infoCompte.nomCompte() << " " << infoCompte.nombreOperations() << " " << infoCompte.soldeCourant();
 
		ptItemCompte = new QTreeWidgetItem(ptParent);
		ptItemCompte->setText(0, tr("%1").arg(infoCompte.nomCompte()));
 
		ptItemInfo = new QTreeWidgetItem(ptItemCompte);
		ptItemInfo->setText(0, tr("Nombre d'opérations = %1").arg(infoCompte.nombreOperations()));
 
		ptItemInfo = new QTreeWidgetItem(ptItemCompte);
		ptItemInfo->setText(0, tr("Solde courant = %1").arg(infoCompte.soldeCourant(), 0, 'f', 2));
 
		m_ptComptes->nextCompte(infoCompte);
	}
 
	ptItemCompte = ptParent->child(0);
	qDebug() << "## Fonction installComptes ## : " << ptItemCompte->text(0);
 
	setCurrentItem (ptItemCompte);
	emit currentItemChanged(ptItemCompte, ptItemCompte);
	qDebug() << "## Fonction installComptes ## : Current Item = " << currentItem()->text(0); 
}
 
void CVueComptes::updateSelectedCompte(QTreeWidgetItem *ptCurrent, QTreeWidgetItem *ptPrevious)
{
	CInfoCompte infoCompte;
 
	qDebug() << "## Fonction updateSelectedCompte ## : ";
 
	if (ptCurrent != 0) {
		infoCompte.setNomCompte(ptCurrent->text(0));
		emit selectedCompteChanged(infoCompte);
	}
}
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
#ifndef __VUE_COMPTES_H__
#define __VUE_COMPTES_H__
 
#include <QObject>
#include <QTreeWidget>
 
#include "InfoCompte.h"
 
class QTreeWidgetItem;
class CDomComptes;
 
class CVueComptes : public QTreeWidget
{
    Q_OBJECT
 
private :
	CDomComptes *m_ptComptes;
 
public :
	CVueComptes(CDomComptes *ptComptes);
 
private :
	void installComptes(QTreeWidgetItem *ptParent);
 
signals :
	void selectedCompteChanged(CInfoCompte infoCompte);
 
public slots :
	void updateSelectedCompte(QTreeWidgetItem *ptCurrent, QTreeWidgetItem *ptPrevious);
};
 
#endif
1er problème :
Quand je lance l'exécution du code j'obtiens dans la console de debug le message suivant :
Object::connect: No such signal CVueComptes::selectedCompteChanged(infoCompte)
alors que la fonction est déclarée dans la classe CVueComptes. Je ne comprends pas.
2ème problème :
Même si dans la fonction installComptes il y a la ligne de code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
emit currentItemChanged(ptItemCompte, ptItemCompte);
il semble que le signal ne soit pas émis car la fonction
void CVueComptes::updateSelectedCompte(QTreeWidgetItem *ptCurrent, QTreeWidgetItem *ptPrevious)
qui lui attachée n'est pas exécuté puisque le commentaire que je demande d'afficher dans la console ne s'affiche pas.

En résumé :
J'ai l'impression que les connections (signals, slots) ne fonctionnent pas. Est-ce que j'ai oublié quelque chose ?

Une personne peut m'aider ?

Par avance merci.