2013-07-25 3 views
1

c'est mon premier post sur le SO^_^Attendez que le bouton pressé (QT)

Je suis en train de mettre en œuvre un cadre letter scramble game avec QT. La partie principale est terminée, mais maintenant je suis stupéfait - je n'arrive pas à comprendre comment faire en sorte que le programme attende que le bouton soit enfoncé à l'intérieur d'une partie.

Aidez-moi s'il vous plaît. Merci à l'avance

Voici pseudocode de mon cycle de jeu:

//initialize grid, score, time 

// accept words until timer expires 
while (true) { 

    // draw the current state of the grid 

    // log board 

    // get current time 

    // report score 

    // check for game's end 

    // report time remaining 

    // prompt for word and converting it to char* 
    //HOW TO WAIT UNTILL BUTTON PRESSED????!!!! 

    // check whether to scramble grid 

    // or to look for word on grid and in dictionary 
} 

post-scriptum Comme c'est mon premier article ici, j'apprécierai toutes les suggestions sur la façon de composer les questions plus correctement.

+0

S'agit-il d'une console ou d'une application graphique? –

+0

Que déclenche le bouton? En général, une pression sur un bouton dans Qt déclenche un 'signal' à déclencher que vous pouvez connecter à une fonction' slot 'pour ensuite gérer la logique que vous voulez exécuter ensuite. –

+0

Bonjour, et bienvenue sur Stack Overflow! Je vous encourage à consulter l'aide du site pour savoir quelles questions sont mal vues et comment obtenir des réponses. Si rien d'autre, s'il vous plaît lire http://stackoverflow.com/help/how-to-ask ou, mieux encore, http://blog.stackoverflow.com/2010/10/asking-better-questions/. Si vous fournissez un contexte clair, un code concis que vous avez déjà écrit, et une question claire, vous obtiendrez des réponses! –

Répondre

3

Il me semble que ce qui vous manque est que Qt est basé sur event-driven programming. Qt fournit des widgets/objets tels que des boutons, des fenêtres, des contrôleurs, etc. que vous affichez à l'utilisateur. Un objet QPushButton, par exemple, est en mesure de recevoir divers événements, tels que ceux d'un clic sur un bouton de la souris, ou en appuyant sur une touche du clavier et bien d'autres. Avec les événements, Qt fournit un mécanisme de créneau/signal pour recevoir ces événements et réagir à ceux-ci. Ainsi, à titre d'exemple, dans le cas d'un QPushButton, il y a un signal appelé 'pressed'. Lorsque l'utilisateur clique sur le bouton, son signal enfoncé est émis. Vous, en tant que développeur, pouvez connecter le signal pressé à un slot, qui est une fonction que vous définissez.

Par exemple, dans une classe appelée MyClass qui est dérivé de QObject: -

QPushButton button("Select"); // create a QPushButton object 
connect(button, SIGNAL(pressed()), this, SLOT(buttonPressed())); 

L'instruction de connexion relie signal « pressé » du bouton à la fonction de l'emplacement appelé « ButtonPressed ». Vous pouvez ensuite définir cette fonction: -

void MyClass::buttonPressed() 
{ 
    // handle the button pressed event.... 
} 

Donc vous n'avez pas fait d'appels à attendre le bouton à presser comme le cadre et son architecture est conçu de cette façon et vous ne devriez pas besoin d'être mettre tout en boucle (vrai).

+0

C'est compris. Il est clair pour moi comment fonctionne le mécanisme de slot de signal, dans l'exemple de mon jeu - je sais comment l'implémenter "sans temps", mais le fait est que je veux qu'il soit joué, disons, pendant 60sec, et je ne peut pas trouver la bonne solution pour cela ... – whalex

+0

Utilisez un QTimer pendant 60 secondes, ou est-ce que je manque quelque chose? – TheDarkKnight

+0

Droit :) Totalement oublié à leur sujet. – whalex

Questions connexes