IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Qt Discussion :

[Qt4] Signaux et Slot


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 26
    Par défaut [Qt4] Signaux et Slot
    Bonsoir,
    Je pense avoir mal compris le système de signaux et slot. J'ai créer un programme tout simple permetant lors d'un click sur un QPushButton d'afficher un text dans un QLabel.

    Voila je ce que propose:

    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
     
    #include <QApplication>
    #include <QLabel>
    #include <QVboxLayout>
    #include <QPushButton>
     
    int main(int argc, char *argv[])
    {
    	QApplication app(argc, argv);
    	QWidget *window = new QWidget;
    	window->setWindowTitle("Signaux et Slots");
     
    	QLabel *text = new QLabel;
    	QPushButton *bouton = new QPushButton("Go !");
    	QVBoxLayout *placement = new QVBoxLayout;
     
    	QObject::connect(bouton,SIGNAL(clicked()),text,SLOT(setText("Bienvenue ")));
     
    	placement->addWidget(text);
    	placement->addWidget(bouton);
    	window->setLayout(placement);
     
    	window->show();
    	return app.exec();
    }
    Je ne comprend pas pourquoi cela ne fonctionne pas ? Quelqu'un pourrais t-il m'aider ? Merçi

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Le signal et le slot doivent avoir le même nombre d'arguments. Sur le forum, qqn a posé EXACTEMENT la même question il n'y a pas longtemps, une recherche te donnera le sujet.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 26
    Par défaut
    Ah je savais pas pour les arguments merçi, j'ai regardé le sujet sur le QLabel et j'ai donc essayer autre chose. J'ai crée ma propre classe QLabelPerso ou j'ai redéfini un slot sans argument.

    Voici ce que je propose :
    qlabelperso.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
     
    #ifndef QLABELPERSO
    #define QLABELPERSO
     
    #include <QLabel>
    #include <QString>
     
    class QLabelPerso : public QLabel
    {
    		Q_OBJECT
    		private :
    					QLabel * label;
     
    		public :
    					QLabelPerso();
    					QLabelPerso(const QString &);
     
    		private slots:
    					 void setTextNow();
    };
     
    #endif
    qlabelperso.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
     
    #include "qlabelperso.h"
     
    QLabelPerso::QLabelPerso()
    {
    	label = new QLabel;
    }
     
    QLabelPerso::QLabelPerso(const QString & text)
    {
    	label = new QLabel(text);
    }
     
     
    void QLabelPerso::setTextNow()
    {
    	label->setText("Welcome To the Real");
    }
    et le test.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
     
    #include <QApplication>
    #include <QLabel>
    #include <QVboxLayout>
    #include <QPushButton>
    #include "qlabelperso.h"
     
    int main(int argc, char *argv[])
    {
    	QApplication app(argc, argv);
    	QWidget *window = new QWidget;
    	window->setWindowTitle("Signaux et Slots");
     
    	QLabelPerso *text = new QLabelPerso("lool");
    	QPushButton *bouton = new QPushButton("Go !");
    	QVBoxLayout *placement = new QVBoxLayout;
     
    	QObject::connect(bouton,SIGNAL(clicked()),text,SLOT(setTextNow()));
     
    	placement->addWidget(text);
    	placement->addWidget(bouton);
    	window->setLayout(placement);
     
    	window->show();
    	return app.exec();
    }
    Cela ne fonctionne toujours pas alors que le signal et le slot on le même argument et je ne comprends toujours pas pourquoi. Si quelqu'un a une solution ... merçi

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,

    Pourquoi ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		private :
    					QLabel * label;
    dans ta classe QLabelPerso ?

    ta classe dérive de QLabel, et elle est donc un QLabel.

    De plus, tu utilises ensuite ton QLabel privé à ta classe, mais où lui demandes-tu de s'afficher ?

    ET tu ne le libères pas quand ton objet est détruit.

    En clair, il te suffit de travailler avec le setText du QLabel dont tu hérites.

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par gentox
    Cela ne fonctionne toujours pas alors que le signal et le slot on le même argument et je ne comprends toujours pas pourquoi. Si quelqu'un a une solution ... merçi
    Qu'est ce qui ne marche pas exactement, stp...

  6. #6
    Membre éprouvé Avatar de galak63
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 126
    Par défaut
    ca ne marche pas car ton SLOT "setTextNow" est un slot privé de ta classe QLabelPerso, il faut le mettre en public.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 26
    Par défaut
    Bonjour et merçi de vos réponses

    ca ne marche pas car ton SLOT "setTextNow" est un slot privé de ta classe QLabelPerso, il faut le mettre en public.
    Je l'ai mis en public ca n'as rien changé.

    Qu'est ce qui ne marche pas exactement, stp...
    Enfait je voudrais lorsque je clique sur le QPushButton afficher un message dans le QLabel,comme le signal clicked() n'as pas d'arguments j'ai du crée un slot dans une nouvelle classe afin que ca fonctionne.

    Bonjour,

    Pourquoi ajouter
    Code :

    private : QLabel * label;

    dans ta classe QLabelPerso ?

    ta classe dérive de QLabel, et elle est donc un QLabel.

    De plus, tu utilises ensuite ton QLabel privé à ta classe, mais où lui demandes-tu de s'afficher ?

    ET tu ne le libères pas quand ton objet est détruit.

    En clair, il te suffit de travailler avec le setText du QLabel dont tu hérites.
    Comment je peux faire ? il me faut bien un objet dans ma classe que je modifie ?

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par gentox
    Enfait je voudrais lorsque je clique sur le QPushButton afficher un message dans le QLabel,comme le signal clicked() n'as pas d'arguments j'ai du crée un slot dans une nouvelle classe afin que ca fonctionne.
    J'ai demandé qu'est ce qui ne marche pas...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 26
    Par défaut
    Ah pardon j'avais mal compris. Lorsque je cliquai rien ne se passais,donc suite a vos réponse j'ai mis en public le slot SetTextNow() et dans mon slot SetTextNow() j'affiche aussi le label. Ce qui se passe maintenant c'est que lors du clique sur le Bouton ca m'ouvre une nouvelle fenetre avec le label au lieu de m'ecrire directement le label dans la fenetre principale.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 26
    Par défaut
    En cherchant un peu j'ai compris
    merçi encore pour vos réponses bonne soirée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Signaux et slots avec Qt4
    Par dourouc05 dans le forum Téléchargez
    Réponses: 0
    Dernier message: 01/11/2010, 22h23
  2. Qt4 Signaux/slots personnels et Code::Blocks
    Par crtx_omar dans le forum Qt
    Réponses: 11
    Dernier message: 30/03/2008, 15h05
  3. Signaux et slots comme Qt
    Par b Oo dans le forum Qt
    Réponses: 21
    Dernier message: 11/04/2007, 17h57
  4. Réponses: 10
    Dernier message: 09/10/2005, 22h33

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