Pb de synchro avec Qt - C++ - Programmation
Marsh Posté le 28-11-2005 à 11:48:16
je pense qu'il faudrait un genre de timer qui executerai le meme code que lorsque tu clic sur le bouton.
genre la même chose qu'en java avec les Timer et ActionListener.
Marsh Posté le 28-11-2005 à 12:14:58
Et si tu tapais simplement 'Timer' dans ton Qt Assistant ?
Marsh Posté le 28-11-2005 à 12:47:40
ok j'ai vu qu'il y avait une classe QTimer en effet, dans mon cas il faut que lorsque que je clique sur ma widget, je lance un slot qui fait une chose, puis (3 secondes après par exemple) une autre.
C'est possible avec QTimer? comment s'y prendre en 2 mots? ou fait-il que je passe par 2 signaux/slot?
Merci
Marsh Posté le 28-11-2005 à 14:39:06
En 2 mots, QTimer::singleShot()
En plus de 2 mots, voici ton shéma actuel:
joueur humain joue > déclenche un signal
slot branché au signal > l'IA joue
La modif est d'insérer un slot supplémentaire:
joueur humain joue > déclenche un signal finHumain
slot branché au signal finHumain > lance un timer singleshot branché au slot IAJoue
Slot IAJoue > lance la phase de l'IA.
Tu n'as qu'à régler le délai du timer et t'es rendu.
Marsh Posté le 28-11-2005 à 19:11:15
IrmatDen a écrit : En 2 mots, QTimer::singleShot() |
Yes! ça marche nickel!
je fais :
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(monSlot()));
timer->start(2000);
et mon slot ce lance au bout de 2 secondes.
merci beaucoup à toi IrmatDen et à ceux qui m'ont répondu
Marsh Posté le 28-11-2005 à 23:55:00
Y'a pas de quoi
Mais pourquoi passes-tu par un timer, plutôt que par le single shot?
Voilà l'équivalent de tes 3 lignes:
Code :
|
Pas de création superflue de timer, pas de connect. En interne c'est sans doute très ressemblant à ce que tu as fait, mais là est tout l'intérêt d'une lib n'est-ce pas?
Marsh Posté le 30-11-2005 à 18:38:57
En effet passer par un QTimer::singleShot(2000, this, SLOT(monSlot())) fonctionne également et il n'y a pas de création superflue de timer, pas de connect.
Merci à toi.
Marsh Posté le 28-11-2005 à 11:26:12
Salut, c'est encore moi avec mon jeu en Qt.
J'ai un problème de 'synchronisation' :
Lorsque le joueur clique sur une case (c'est un othello/reversi) pour jouer, ça lance un signal->slot qui joue et qui ensuite lance mon intelligence artificielle.
Le problème c'est que ça va trop vite : on a pas le temps de voir ce que l'humain joue, que le plateau est recouvert par le coup du CPU.
J'ai essayé de mettre des sleep() dans mon slot entre le coup de l'humain et du cpu, ça attend bien, mais ça affiche toujours les 2 coups simultanément, ce qui fait que l'on ne vois pas le coup du joueur.
J'ai essayé de faire jouer l'IA en cliquant sur un bouton, et ça marche, mais ça ne me convient pas.
La question est peut-être un peu vague, mais si quelqu'un a déjà connu ce problème, je suis preneur.
D'avance merci!