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

Qt Discussion :

[QDialog] Trapper l'appui sur "Esc"


Sujet :

Qt

  1. #1
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut [QDialog] Trapper l'appui sur "Esc"
    Bonjour à tous

    J'essaye sans succès depuis cet après-midi de trapper l'appui sur la touche "Esc" dans un QDialog afin d'éviter que l'appui de cette touche ferme mon QDialog.
    J'ai essayé de connecter le signal "reject()" à un slot perso mais bien que ce signal soit intercepté, mon QDialog se ferme quand-même.

    Quelqu'un a-t-il une solution ?

    Merci de m'avoir lu

  2. #2
    Membre expérimenté

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

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Bonsoir,

    reject() est un slot virtuel (et non un signal, le signal est rejected() ) que tu peux redéfinir. L'autre méthode pourrait être de traiter l'appui sur échap en redéfinissant keyPressEvent() et en l'interceptant avant d'appeler l'implémentation de QDialog.

    Citation Envoyé par Sve@r
    bien que ce signal soit intercepté
    On ne peut pas (simplement) intercepter un signal au sens strict du terme. Un signal est connecté à n slots, et les déclenche tous les uns après les autres. Donc soit on déconnecte le signal, soit on redéfinit le slot.

  3. #3
    Membre régulier

    Homme Profil pro
    gerant
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Algérie

    Informations professionnelles :
    Activité : gerant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Points : 88
    Points
    88
    Par défaut
    Bonjour, tu peux surcharger ce methode virtual

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void QWidget::keyPressEvent ( QKeyEvent * event )
    et depuis QKeyEvent tu test si la touche Esc est la concernée.

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Troudhyl Voir le message
    Bonsoir,
    -
    reject() est un slot virtuel (et non un signal, le signal est rejected() ) que tu peux redéfinir. L'autre méthode pourrait être de traiter l'appui sur échap en redéfinissant keyPressEvent() et en l'interceptant avant d'appeler l'implémentation de QDialog.
    Redéfinir un signal ? Ca je ne savais pas que c'était possible. Toutefois, petit détail que je n'ai pas mentionné, je suis en PyQt et non en C++/Qt.
    Mais j'ai redéfini le keyPressEvent (que je ne connaissais pas) et ça marche super. Ainsi je peux voir si event.key() == Qt.keyEscape et faire un traitement spécial. Merci

    Petite aparté: la doc Qt est super détaillée pour chaque objet (si j'avais fait plus attention j'aurais trouvé d'ailleurs le keyPressEvent qui est bien décrit dans les objets hérité d'un QDialog) mais il manque malheureusement une espèce de plan d'ensemble. Un peu comme si on voulait fabriquer un avion en ayant juste le détail du train d'atterrissage, le détail du moteur, le détail du cockpit et le détail de l'aile. Ensuite à toi de te débrouiller pour savoir qu'il faut un train, un cockpit, une aile et une carlingue puis comprendre qu'il faut raccrocher le cockpit à la carlingue, la carlingue à l'aile et au train puis connecter le bouton X du cockpit au slot "rentrerRoues()" du train...

    Citation Envoyé par baliloo Voir le message
    Bonjour, tu peux surcharger ce methode virtual

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void QWidget::keyPressEvent ( QKeyEvent * event )
    - et depuis QKeyEvent tu test si la touche Esc est la concernée.
    Oui, exactement ce que j'ai fait. Merci de ton intervention

  5. #5
    Membre expérimenté

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

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Citation Envoyé par Troudhyl Voir le message
    Bonsoir,

    reject() est un slot virtuel (et non un signal, le signal est rejected() ) que tu peux redéfinir. L'autre méthode pourrait être de traiter l'appui sur échap en redéfinissant keyPressEvent() et en l'interceptant avant d'appeler l'implémentation de QDialog.
    Redéfinir un signal ? Ca je ne savais pas que c'était possible.

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

Discussions similaires

  1. [Quote] DVP quoté sur Bashfr
    Par Skyounet dans le forum La taverne du Club : Humour et divers
    Réponses: 16
    Dernier message: 26/09/2006, 19h52

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