Condition avec signaux [Résolu]

Signaler
Messages postés
11
Date d'inscription
mardi 22 juillet 2008
Statut
Membre
Dernière intervention
16 janvier 2010
-
Messages postés
11
Date d'inscription
mardi 22 juillet 2008
Statut
Membre
Dernière intervention
16 janvier 2010
-
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="ProgId" content="Word.Document" />
<meta name="Generator" content="Microsoft Word 11" />
<meta name="Originator" content="Microsoft Word 11" />
<link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CMatt%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" />
<o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="metricconverter">
</o:smarttagtype>
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:HyphenationZone>21</w:HyphenationZone>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]-->
<!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]-->
<!--[if !mso]><object
classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui></object>
<style>
st1\:*{behavior:url(#ieooui) }
</style>
<![endif]-->
<style>
<!--
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
@page Section1
{size:595.3pt 841.9pt;
margin:70.85pt 70.85pt 70.85pt 70.85pt;
mso-header-margin:35.4pt;
mso-footer-margin:35.4pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
-->
</style>
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tableau Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->
Bonjour


Voilà, je demande votre aide afin de m'expliquer comment faire pour que lorsque
la valeur de p < 7, le programme affiche une icône et que lorsque que cette
valeur est supérieure à 7, alors une autre icône s'affiche.


J'ai donc ainsi écrit le code suivant:


QObject::connect(p,SIGNAL(valueChanged(int)),lab1,SLOT(setNum(int)));

    if (p->value() == 7 )

    {

       
lab3->setPixmap(QPixmap("114.png"));

    }


    else

    {

       
lab3->setPixmap(QPixmap("113.png"));

    }


Seul problème, lorsque que je change la valeur de p > <st1:metricconverter productid="7, l" w:st="on">7, l</st1:metricconverter>'icône reste le même.

Donc en résumé ma question et peut-on m'aider pour savoir comment coder une
telle situation


En vous remerciant par avance


Chimisteq

6 réponses

Messages postés
15087
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 juillet 2021
97
Hello,
Voici ce que je fais pour ma part, adapté à ton cas.
Dans le constructeur de mon widget, je déclare 2 icônes: m_Icon114("114.png") et m_Icon113("113.png")

Ensuite, je récupère la valeur voulue (p->value() dans ton cas) et je fais le test suivant:
if (p->value() < 7)
  lab3->setIcon(m_Icon113);
else
  lab3->setIcon(m_Icon114);

NB: En passant, tu veux changer l'icône pour une valeur inférieure ou supérieure à 7 mais dans ton code, tu testes l'égalité avec cette valeur: ce n'est pas correct..

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
15087
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 juillet 2021
97
i = p->value();



--> Inutile: la valeur est déjà passée en paramètre

Ah, un truc aussi, dans ton main.cpp: il vaut mieux include des .h que des .cpp

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
11
Date d'inscription
mardi 22 juillet 2008
Statut
Membre
Dernière intervention
16 janvier 2010

Merci buno pour votre réponse, mais pouvez-vous développer votre code s'il vous plaît, car malgré mes tests ça ne marche pas ?

Pour votre futur aide, je vous envoie le code source en entier.
Fenetre.h:<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>



#ifndef
DEF_K





#define
DEF_K





#include

<QtGui>






#include

<QLayout>






#include







class
MaFenetre : public QWidget





{





Q_OBJECT





 





public
:





MaFenetre();





 





private
:





QPushButton *ok;





QSpinBox *p, *q;





QGridLayout *Test;





QLabel *lab1, *lab2, *lab3, *lab4;





 





 





};





#endif


Fenetre.cpp:








#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(lab1,1,1);





Test->addWidget(lab2,3,1);





Test->addWidget(lab3,3,3);





Test->addWidget(lab4,0,2);





Test->addWidget(ok,2,1,1,3);





setLayout(Test);





 





QObject::connect(p,SIGNAL(valueChanged(
int
)),lab1,SLOT(setNum(
int
)));





   if
(p->value() < 7)





   {





ico->setPixmap(QPixmap(
"114.png"
));





   
}





else





   {





ico->setPixmap(QPixmap(
"113.png"
));





   }

}

main.cpp:








#include


"Fenetre.cpp"





int
main(
int
argc,
char
* argv[])





{





QApplication app(argc,argv);





MaFenetre fenetre;





fenetre.show();





return
app.exec();





}







J'espère que cela peut aider pour de futures réponses.

Merci





 




 
Messages postés
15087
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 juillet 2021
97
Ton test est fait dans le constructeur de ton objet, c'est normal?
Tu ne voulais pas lancer le test seulement si la valeur a été modifié? Dans ce cas, il faut que tu écrives une fonction qui sera appelée à chaque modification de valeur...

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
11
Date d'inscription
mardi 22 juillet 2008
Statut
Membre
Dernière intervention
16 janvier 2010

Je propose ce code suivant:

QObject::connect(p,SIGNAL(valueChanged(

int)),lab1,SLOT(setNum(
int)));QObject::connect(p,SIGNAL(valueChanged(

int)),
this,SLOT(Cond(
int i))); 

 

}

 

void

MaFenetre::Cond(
int i){

i = p->value();

if (i < 7){

lab3->setPixmap(QPixmap(

"114.png"));}

else{

lab3->setPixmap(QPixmap(

"113.png"));}

}

Le compilateur l'accepte, mais la condition ne marche pas. Où est l'erreur ?
Messages postés
11
Date d'inscription
mardi 22 juillet 2008
Statut
Membre
Dernière intervention
16 janvier 2010

ok merci, j'ai trouvé l'erreur