Condition avec signaux

Résolu
chimisteq Messages postés 11 Date d'inscription mardi 22 juillet 2008 Statut Membre Dernière intervention 16 janvier 2010 - 22 juil. 2008 à 09:41
chimisteq Messages postés 11 Date d'inscription mardi 22 juillet 2008 Statut Membre Dernière intervention 16 janvier 2010 - 25 juil. 2008 à 19:20
<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

BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
22 juil. 2008 à 09:58
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...
3
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
22 juil. 2008 à 11:45
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...
3
chimisteq Messages postés 11 Date d'inscription mardi 22 juillet 2008 Statut Membre Dernière intervention 16 janvier 2010
22 juil. 2008 à 10:29
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





 




 
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
22 juil. 2008 à 10:39
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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chimisteq Messages postés 11 Date d'inscription mardi 22 juillet 2008 Statut Membre Dernière intervention 16 janvier 2010
22 juil. 2008 à 11:41
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 ?
0
chimisteq Messages postés 11 Date d'inscription mardi 22 juillet 2008 Statut Membre Dernière intervention 16 janvier 2010
25 juil. 2008 à 19:20
ok merci, j'ai trouvé l'erreur
0
Rejoignez-nous