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 :

La gestion des événements

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2010
    Messages : 126
    Par défaut La gestion des événements
    Bonjour a tous, je fais appelle a vous car je rencontre de grosse difficulté concernant la gestion des evenements.
    Je n'ai commencé qu'a travaillé dessus que depuis hier, je suis donc un grand debutant.

    J'ai chercher des tutoriels qui explique le fonctionnement de la gestion des evenements mais je n'ai rien trouver, c'est pourquoi je me tourne vers vous.

    J'ai compris le principe de la gestion des evenements mais je n'ai absolument rien compris à cette histoire de focus (j'ai juste compris que sa servait a faire en sorte qu'un widget soit le widget courant, mais je vois pas a quoi sa sert).
    J'ai egalement lu sur des forums qu'il fallait egalement utiliser les methode accpet() et ignore (la aussi je ne comprend pas pourquoi et surtout a quoi sa sert).
    J'ai lu la doc du site officiel de Qt mais je ne comprend que partiellement les explications.

    Alors pour essayer de comprendre j'ai fait un petit programme pour laquel lorsqu"on appuye sur la fleche directionnelle droite, le curseur du slider se place a la position 99.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    void UnClient::keyPressEvent(QKeyEvent* event)
    {
          horizontalSliderClient->setFocus();
     
        if (event->key() == Qt::Key_Right)
        {
     
            horizontalSliderClient->setSliderPosition(99);
            QMessageBox::information(this, "", "on appuye sur la touche -->");
     
        }
        else if (event->key() == Qt::Key_Escape)
        {
            QMessageBox::information(this, "", "on appuye sur la touche Esc");
            close();
        }
     
    }
    et comme je ne comprend rien a la gestion des evenements, forcement le code ne fonctionne pas non plus.

    J'aimerai donc que vous m'explquiez ce qu'est cette histoire de focus et de méthodes accept() et ignore() a utiliser afin que je puisse faire fonctionner cette evenement parce que je tourne en rond malgré mes recherches.

    PS : merci de votre patience et des explications que vous m'apporterez.
    PS2 : le probleme peut vous paraitre ridicule mais bon je n'y arrive pas

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 26
    Par défaut
    Alors je ne suis peut être pas une référence sur le sujet mais je n'ai jamais entendu parler d'acpet() et focus() dans Qt.

    Je te conseille ce guide pour commencer : http://qt.developpez.com/tutoriels/introduction-qt/

    Sinon en gros Qt fonctionne avec des "signaux" et des "slots"
    lors d'actions particulières (comme un clic sur un bouton) un signal est émis
    tu peux connecter (via la fonction connect de QObject) des signaux à un ou plusieurs slots, qui sont en fait des fonction exécutées à chaque fois que le signal est émis.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2010
    Messages : 126
    Par défaut
    merci, je connais cette maniere de proceder, mais je souhaiterai utiliser l'autre maniere, c'est a dire, ce que j'ai exposé au dessus

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 49
    Par défaut
    pour setFocus t'a les explications ici:
    http://qt.developpez.com/doc/4.6/qwidget/#setFocus

    en gros ça permet au QWidget sur lequel tu appelle setFocus de gérer les evenements clavier, c'est lui seul qui les gère (si j'ai bien compris)

    Tu dois donc faire setFocus sur ton objet UnClient, en dehors de la fonction keyPressEvent

    ça devrait suffire, je vois pas ce que viens faire le accept() et ignore()

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Tu pourrais passer un lien de doc plus récent ^^ http://qt.developpez.com/doc/latest/qwidget/#setfocus

    La notion de focus est très simple à comprendre, avec les champs de texte par exemple. Si le curseur clignote dedans, c'est qu'il a le focus, on sait que quand on écrira ça tapera dedans. Si je clique sur la page à côté du champ et que j'essaye de taper, ça donnera rien car la page aura le focus et non plus le champ. Un seul élément peut prendre le focus (tu peux pas écrire réellement à deux endroits à la fois).

    Ton horizontalSliderClient->setFocus() ne sert à rien, car tu ne souhaites pas qu'il prenne le focus justement, au détriment de ton "UnClient" (à moins que tu aies une classe sliderClient où tu as implémenté un contrôle clavier quelconque).

    Concernant accept() et ignore(), la doc est assez clair il me semble, http://qt.developpez.com/doc/latest/qevent/#accept
    Ça agit juste sur la propagation aux parents.

    Exemple (un peu idiot mais c'est ce qui me vient à l'esprit :p) :
    Tu as un champ texte dans une fenetre QWidget. Tu veux qu'on puisse déplacer cette fenêtre avec les flèches quoi qu'il arrive, donc tu vas empêcher l'utilisation normale des flèches dans le champ texte (déplacement du curseur). Alors tu devras réimplémenter le keyPressEvent de QLineEdit, par exemple, pour faire des event.ignore() pour les flèches, comme ça l'événement sera récupéré par la fenêtre pour se déplacer, même si c'est ton champ qui a le focus !

    Je sais pas si c'est clair, reprenez-moi si je dis des bêtises

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2010
    Messages : 126
    Par défaut
    d'accord je te remercie pour tes explications tres explicite
    je comprend mieux a present.
    Toutefois j'ai encore une question : Comment faire pour faire en sorte que le QLineEdit refile les fleches au parent ? Je sais qu'il faut utiliser ignore mais etant donné que je n'ai passé acces au code de la classe QLineEdit et que donc je ne peuxdonc pas re implementer keyPressEvent(QKeyEvent* event), comment est ce que je doit m'y prendre ?

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

Discussions similaires

  1. [XML] [EXPAT] xml_parse et la gestion des événements...
    Par Herode dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 05/02/2006, 20h59
  2. Gestion des évènements Netscape 7.0
    Par RATHQUEBER dans le forum Autres langages pour le Web
    Réponses: 6
    Dernier message: 19/12/2005, 16h26
  3. Problème avec la gestion des événements
    Par CynO dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/10/2005, 10h07
  4. [JTable] gestion des événements
    Par soulhouf dans le forum Composants
    Réponses: 4
    Dernier message: 19/08/2005, 13h21
  5. Gestion des évènements lors d'un clique sur une image.
    Par yoghisan dans le forum Débuter
    Réponses: 7
    Dernier message: 23/06/2005, 19h04

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