Probleme avec qt/kdevelop

Probleme avec qt/kdevelop - C++ - Programmation

Marsh Posté le 25-03-2005 à 21:03:29    

Alors j'esplique mon probleme,
 
Je suis en 2nd annee de bts informatique et je dois effectuer un projet de fin d'annee. J'ai choisi de faire la gestion d'un parking. Plus precisement, je m'occupe de la programmation de la borne de paiement.
 
Voila mon probleme, je dois faire une IHM pour simuler le monnayeur, pour cela je dois utiliser qt designer. J'ai un main.cpp ki lance tous les composants (le lecteur de carte, le controle d capteur etc...) puis il passe la main a mon application ki elle attend kil y ai d evennement (ex : insertion de piece, insertion d'une carte, annulation du paiement etc...). Cette application lance mon ihm ki simule le monnayeur. Mais je ne c pas comment faire pour que lorsque je clik sur une piece de mon ihm, il envoi un evenement ou un signal a mon application (avec qt).
 
Est ce que qqu pourait m'aider ou me donner des exemple dans le meme genre?
Merci d'avance pour votre aide

Reply

Marsh Posté le 25-03-2005 à 21:03:29   

Reply

Marsh Posté le 25-03-2005 à 21:24:49    

pas mal ton sondage mais t'as oublié obiwan quand même.

Reply

Marsh Posté le 25-03-2005 à 21:44:29    

Vu que tu bosses sur Qt, tu n'as qu'à utiliser le mécanisme SIGNAL/SLOT, genre

Code :
  1. connect(piece ,SIGNAL(clicked()), this, SLOT(pieceEntree()));


en supposant que piece est ton bouton et que pieceEntree est un slot déclaré dans ton application effectuant ce que tu veux lors de l'insertion d'une pièce.

Reply

Marsh Posté le 25-03-2005 à 22:02:45    

ouaip les signals/slots sont bien pratiques et simples à utiliser à mon avis. La doc officielle est pas mal foutue. Commence éventuellement là : http://doc.trolltech.com/3.3/signalsandslots.html

Reply

Marsh Posté le 26-03-2005 à 13:09:01    

Merci bien pour vos reponses tres rapide. Je viens de lire une doc sur les signals et les slots, ca a l'air bien interessant tt ca.  
Mais j'ai une derniere question. Deja je vais expliker mon programme, donc j'ai une application (a) qui cree une boite de dialogue (piece) et dans cette boite de dialogue il y a des pushbutton ki simule les pieces (p1,p2,....). Si j'ai bien compris, lorsque j'appuie sur un boutton, cela cree un signal, mais est ce que ce signal je peux le connecter a un slot de mon application (piece_inseree) pour ke l'application effectuer differente chose?
 
Merci d'avance pour votre reponse.

Reply

Marsh Posté le 26-03-2005 à 17:12:49    

Citation :

est ce que ce signal je peux le connecter a un slot de mon application (piece_inseree) pour ke l'application effectuer differente chose


C'est justement pour cette raison que ce mécanisme a été créé. D'ailleurs une fois que tu y a touché tu ne peux plus t'en passer !
 
Je suppose que tu veux effectuer le même type d'action pour chaque pièce insérée et qu'il n'y a que la valeur de cette pièce qui change.
Si tu utilises le mécanisme SIGNAL/SLOT de base, tu devras connecter le signal clicked() de p1 à un slot de ton appli du type p1clicked(). L'inconvénient de cette méthode est que tu va devoir déclarer des slots pour chaque bouton.
Pour te simplifier la tache, je te conseille de lire http://doc.trolltech.com/qq/qq10-signalmapper.html. Quelques approches sont exposées qui simplifieront ton code.

Reply

Marsh Posté le 29-03-2005 à 20:48:53    

J'avais une derniere questions, est t'il possible de mettre un argument avec le slot, par exemple :
void insertion_piece(int)
ou
void insertion_piece(double)
 
merci d'avance pr votre reponse

Reply

Marsh Posté le 29-03-2005 à 21:35:51    

Les arguments que tu peux utiliser dans un slot doivent être le(s) même(s) que celui/ceux du signal émis. A quoi correspondrait l'utilisation de ton argument ?

Reply

Marsh Posté le 30-03-2005 à 21:52:57    

L'argument correspont a la valeur de la piece que je veux inserrer. Donc de preference je voudrais un double.
Merci d'avance pour votre reponse

Reply

Marsh Posté le 30-03-2005 à 23:49:43    

Dans ce cas tu peux créer ton propre signal. Exemple :

Code :
  1. // parcmetre.h
  2. class Parcmetre
  3. {
  4. ...
  5. signals:
  6.    void pieceInseree(double valeur);
  7. protected slots:
  8.    // insertion d'une piece de 0.10E
  9.    void p1clicked();
  10.    // insertion d'une piece de 0.20E
  11.    void p2clicked();
  12. };
  13. //parcmetre.cpp
  14. Parcmetre::Parcmetre()
  15. {
  16.    ...
  17.    QPushButton *p1 = new QPushButton(this);
  18.    connect(p1, SIGNAL(clicked()), this, SLOT(p1clicked()));
  19.    QPushButton *p2 = new QPushButton(this);
  20.    connect(p2, SIGNAL(clicked()), this, SLOT(p2clicked()));
  21. }
  22. void Parcmetre::p1clicked()
  23. {
  24.    emit pieceInseree(0.10);
  25. }
  26. void Parcmetre::p2clicked()
  27. {
  28.    emit pieceInseree(0.20);
  29. }


 
ou mieux (plus souple) : en utilisant le QSignalMapper décris dans le lien plus haut tu utilises des QString au lieu de double et tu convertis la chaine reçue en double...
A toi de voir l'approche que tu préfères...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed