IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Comment utiliser QWaitCondition ?

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 38
    Points : 24
    Points
    24
    Par défaut Comment utiliser QWaitCondition ?
    Bonjour à tous,

    Je m'essaie à Qt en essayant de faire un jeu simple pour commencer. Et pour cela j'ai cherché une fonction permettant d'attendre un event (comme le clic droit d'une souris). Dans la doc j'ai trouvé la classe QWaitCondition, mais je ne comprends pas bien comment cela fonctionne. Pourriez-vous me réexpliquer? Ou bien m'enseigner une autre manière de faire?

    Merci d'avance de vos réponses

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Salut.
    QWaitCondition sert à synchronizer des thread.

    Si tu veux réagir sur le click souris, reimpelmente plutôt une fonction liée à la souris comme mouseReleaseEvent
    http://qt-project.org/doc/qt-4.8/qwi...seReleaseEvent

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 38
    Points : 24
    Points
    24
    Par défaut
    Merci pour ta réponse.

    D'accord pour QWaitCondition, mais tu n'as pas exactement répondu a ma question.

    J'ai contourné le problème en écrivant le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    bool fini(false);
    while (fini)
    {
     
    }
    et un évènement mouseReleaseEvent appelle un slot ou le booléen est changé en true. Mais c'est assez moche comme façon de faire. N'y a-t-il pas un moyen d'implémenter une fonction d'attente?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Ce type d'attente synchrone se fait rarement... c'est pourquoi comme yan je privilégierai la piste du slot.

    Pour répondre à ta question tout de même, utilise un QEventLoop.
    Il n'y a pas de signal spécifique pour le clic droit de la souris, aussi il te faudra réimplémenter les méthodes mousePressEvent et mouseReleaseEvent, et créer ton propre signal émit dans mousePressEvent selon les bonnes conditions. Puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    QEventLoop loop;
    QObject::connect(tonWidget, SIGNAL(tonSignalClicDroit()), &loop, SLOT(quit()));
    loop.exec(); // attente
     
    // la suite

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 38
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    Merci beaucoup cela répond parfaitement à ma question, et j'ai pu l'implémenter facilement avec la documentation Qt.

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Tu utilise un thread? sinon je ne voie pas pourquoi tu parle de QWaitCondition. Pour te répondre sur l'utilisation de Wait condition :

    Tu a besoin d'un QMutex ou QReadWriteLock et d'un QWaitCondition qui devra être partagé.

    Dans le thread tu lock to mutex puis tu utilise le WaitCondition pour bloquer l'exécution du thread (le mutex est libéré)

    Dans ton thread principale, lors du clique souris, tu utilise le waitcondition pour débloquer le thread (le mutex est re locké).



    Si tu n'utilise pas de thread, tu devrais découper ton traitement en plusieurs méthodes au-lieu de faire des points de synchro. Le top serait que ton traitement correspond à une classe avec plusieurs méthodes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/02/2009, 12h06
  2. Comment utiliser un cache ?
    Par TOM-Z dans le forum XMLRAD
    Réponses: 4
    Dernier message: 14/03/2003, 09h55
  3. comment utiliser actionscript ?
    Par webs dans le forum Flash
    Réponses: 3
    Dernier message: 09/02/2003, 23h11
  4. Comment utiliser OUT ?
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 3
    Dernier message: 20/07/2002, 09h35
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo