Interface graphique sous QT

Signaler
Messages postés
2
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
11 mai 2004
-
Messages postés
584
Date d'inscription
mardi 26 novembre 2002
Statut
Membre
Dernière intervention
29 mai 2015
-
Bonjour a tous !
alors je vous explique mon ptit pb :
jai créé un ptit programme en c++ sous visual c++. Mon programme comporte 2 fonctions(qui utilisent des classes...)
bref, je l'ai programmé et testé en mode console, ça marche nikel.
Maintenant j'aimerai créer une interface grafique toute simple où apparait 2 bouton, qui, quand on appuye sur l'un ou l'autre appelle la fonction correspondante.
Alors on m'a conseillé d'utiliser Qt (parce que j'y connait rien en grafique...).
J'ai donc installé QT et créé une ptite interface rapide avec 2 boutons.
Ensuite j'ai importé les fichier .cpp et .h de mon prog console.
j'ai ensuite créé une classe widget pour mes boutons.

dans le widget.h :

class MyWidget : public QWidget
{
public:
MyWidget( QWidget *parent=0, const char *name=0 );

public slots:

void fonction1(string ficEntree, string ficSortie);
void fonction2(string ficEntree, string ficSortie);
};

et dans le widget.cpp : j'ai créé mes 2 boutons et jai rajouté :

connect( bouton1, SIGNAL(clicked()),this, SLOT(fonction1("source.txt", "sortie.dat")) );
connect( bouton2, SIGNAL(clicked()),this, SLOT(fonction2("sortie.dat","decompresser.dat")) );

A la compile, pas de probleme.
Par contre kan j'execute, mes boutons apparaissent mais kan je clik sur l'un ou l'autre, rien ne se passe...

Alors est ce que ça vient du fait que j'ai oublié qqchose, ou bien que j'utilise mal les slots...

merci pour votre aide...

Body Love power

3 réponses

Messages postés
584
Date d'inscription
mardi 26 novembre 2002
Statut
Membre
Dernière intervention
29 mai 2015

1) Quand une classe utilise les slots elle doit être un Q_OBJECT.

Pour cela il suffit de mettre Q_OBJECT juste après l'accolade ouvrante de ta classe :

class MyWidget : public QWidget
{
Q_OBJECT
public:
....

2) Les slots doivent avoir exactement la même signature que les SIGNAL auquels ils sont associés. Donc il te faut 2 slots:
void fonction1() { fonction1("source.txt", "sortie.dat") };
et
void fonction2() { fonction2("sortie.dat","decompresser.dat") };

et remplace tes connect par:

connect( bouton1, SIGNAL(clicked()),this, SLOT(fonction1()) );
connect( bouton2, SIGNAL(clicked()),this, SLOT(fonction2()) );

On ne force pas une curiosité, on l'éveille.
.................................................Daniel Pennac
Messages postés
2
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
11 mai 2004

merci beaucoup...
mais maintenant j'ai un autre probleme...
alors dans mon .h j'ai :

class MyWidget : public QWidget
{
Q_OBJECT

public:
MyWidget( QWidget *parent=0, const char *name=0 );

public slots:
void fonction1()
{
void fonction1(string ficEntree, string ficSortie);
}
void fonction2()
{
void fonction2(string ficEntree, string ficSortie);
}
};

et dans mon .cpp j'ai dans la descriptions de mes fonctions :

MyWidget::fonction1()
{
void fonction1(string ficEntree, string ficSortie)
{
//ma fonction
}
}

et il me plante a la compilation
overloaded function differs only by return type from 'void __thiscall MyWidget::fonction1(void)'

je comprend pas trop comment faire pour ne pas a avoir a redefinir 2 fois le corps de ma fonction..
je suis un peu perdu...

Body Love power
Messages postés
584
Date d'inscription
mardi 26 novembre 2002
Statut
Membre
Dernière intervention
29 mai 2015

Cette syntaxe n'est pas correcte...
Reprend mon code texto!

On ne force pas une curiosité, on l'éveille.
.................................................Daniel Pennac