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 :

Signaux & condition


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Par défaut Signaux & condition
    Bonjour

    J'ai besoin de votre aide, et cela fait plus de 4 jours que je ne trouve pas la solution et j'ai finalement décidé de poster sur ce site.
    Voici mon problème:

    Je désire créer une condition qui affiche un icône en fonction de la valeur entrée et cela à chaque fois qu'une nouvelle valeur va être entrée. Peut-on m'aider ?

    Voici le code:

    Fenetre.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
     
    #ifndef DEF_K
    #define DEF_K
    #include <QtGui>
    #include <QLayout>
    #include <iostream>
     
    class MaFenetre : public QWidget
    {
    	Q_OBJECT
     
     
    	public:
    	MaFenetre();
     
    	public slots:
    	void Cond(int i);
     
     
     
    	private:
    	QPushButton *ok;
    	QSpinBox *p, *q;
    	QGridLayout *Test;
    	QLabel *lab1, *lab2, *lab3, *lab4;
     
     
     
     
     
     
     
    };
     
    #endif
    Fenetre.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
     
    #include "Fenetre.h"
     
    MaFenetre::MaFenetre() :QWidget()
    {
     
     
    	ok = new QPushButton("Calcul",this);
    	p = new QSpinBox(this);
    	p->setRange(0,2147483647);
    	q = new QSpinBox(this);
    	q->setRange(0,2147483647);
    	lab1 = new QLabel(this);
    	lab2 = new QLabel(this);
    	lab3 = new QLabel(this);
    	lab4 = new QLabel(this);
     
     
     
     
     
    	Test = new QGridLayout;
    	Test->addWidget(p,0,1);
    	Test->addWidget(q,0,4);
    	Test->addWidget(ok,2,2,1,4);
    	Test->addWidget(lab1,1,1);
    	Test->addWidget(lab2,1,3);
    	Test->addWidget(lab3,3,1);
    	Test->addWidget(lab4,3,3);
    	setLayout(Test);
     
     
     
     
    	QObject::connect(p,SIGNAL(valueChanged(int)),lab1,SLOT(setNum(int)));
    	QObject::connect(lab1,SIGNAL(valueChanged(int)),this,SLOT(Cond(int i)));
     
     
     
    }
     
     
    void MaFenetre::Cond(int i)
    {	
     
    	if (i < 7)
    	{
    		lab3->setPixmap(QPixmap("114.png"));
     
    	}
    	else
    	{
    		lab3->setPixmap(QPixmap("113.png"));
     
    	}
     
    }
    main.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include "Fenetre.h"
     
    int main(int argc, char* argv[])
    {
    	QApplication app(argc,argv);
     
    	MaFenetre fenetre;
     
     
    	fenetre.show();
     
    	return app.exec();
    }
    Merci

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Salut, et bienvenue sur ce forum !

    Alors concernant ton problème, déjà tu pourrais nous donner les erreurs que ton code engendre. Est des erreurs de compilation ? d'éxécution ? ça se lance mais ça ne marche pas ?

    Sinon, dans ces lignes :
    QObject::connect(p,SIGNAL(valueChanged(int)),lab1,SLOT(setNum(int)));
    QObject::connect(lab1,SIGNAL(valueChanged(int)),this,SLOT(Cond(int i)));
    Où as tu vu que lab1, c'est à dire un QLabel, possède un signal : Il existe bien pour QSpinBox, mais pas pour QLabel

    Ensuite, pourquoi ne pas directement connecter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p,SIGNAL(valueChanged(int) => this,SLOT(cond(int)) ?
    Et dans ton slot, tu modifies la valeur du label (en faisant setNum(int) par exemple).

    Essaie ça, et donne nous des précisions sur la nature du problème.

    Bonne chance,

    G.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Par défaut
    Citation Envoyé par Gulish Voir le message
    Alors concernant ton problème, déjà tu pourrais nous donner les erreurs que ton code engendre. Est des erreurs de compilation ? d'éxécution ? ça se lance mais ça ne marche pas ?
    Merci pour votre réponse et je viens de l'intégrer. Cependant, il n'y a pas de problème à la compilation. Mais lorsque que je fais cahnegr la valeur de ma QSpinBox, et bien aucun des deux icones qui correspondent à la condition n'apparaît.
    Alors que faire ?

  4. #4
    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
    Il y a des signaux non connectés sans doute, ça s'affiche sur le terminal.

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Plutot que de te donner la réponse, je vais t'aider à trouver ton erreur :

    Deux problèmes peuvent empêcher ton image de s'afficher :

    1)Ton slot n'est pas appelé. Tu pourrais peut être tester avec des choses plus simples, en essayant de changer le texte de tes labels, plutôt que d'y mettre une image

    2)Si l'étape une ne pose pas de problème, et que ton slot est en effet bien appelé, c'est ta façon d'afficher l'image qui est mauvaise. Peut être pourrais tu essayer d'afficher une image dans un qlabel dans un programme plus simple. Peut être qu'en utilisant la FAQ Qt tu trouveras une réponse ? Peut être que le chemin de ton image est mauvais ? etc ...

    Essaie de valider les étapes une par une, et tu finiras pas trouver la solution seul !

    Bon courage,

    G.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Par défaut
    Apparemment, c'est un problème de connexion de slots.

    Pour vérifier, j'ai fait comme suit:
    - Remplacer l'intérieur de void, par lab1->setNum(1);
    Puis, j'ai remplacé this par qApp et par lab1;

    Mais rien à faire, sa ne marche pas. ( Plus précisement, la fonction void ne s'execute pas)

    Alors, comment faire pour obtenir une bonne connexion ?

  7. #7
    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
    Vérifier ce que Qt te dit sur la sortie terminal.........

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 94
    Par défaut
    salut

    D'après la doc de Qt, il n'y a pas de signal valueChanged pour un QPushButton.
    Par contre, tu peux peut faire un slot qui va récupérer la valeur quand tu va cliquer sur le bouton

Discussions similaires

  1. [Amstrad] Signaux à gérer port E/S pour lire ROM
    Par Masterglob dans le forum Autres architectures
    Réponses: 7
    Dernier message: 12/01/2005, 12h03
  2. Condition sur debug et release
    Par xave dans le forum MFC
    Réponses: 3
    Dernier message: 04/02/2004, 15h04
  3. Condition et contenu TImage
    Par Detlev_linux dans le forum Langage
    Réponses: 6
    Dernier message: 23/12/2003, 01h00
  4. boucle avec condition d'arret changeante
    Par NicoH dans le forum Langage
    Réponses: 3
    Dernier message: 10/06/2003, 11h48

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