Interface graphique sous QT

cs_zordon Messages postés 2 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 mai 2004 - 11 mai 2004 à 16:18
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 - 12 mai 2004 à 19:48
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

garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
11 mai 2004 à 17:06
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
0
cs_zordon Messages postés 2 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 mai 2004
11 mai 2004 à 18:03
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
0
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
12 mai 2004 à 19:48
Cette syntaxe n'est pas correcte...
Reprend mon code texto!

On ne force pas une curiosité, on l'éveille.
.................................................Daniel Pennac
0
Rejoignez-nous