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 :

Boutons, fenêtres et setAutoDefault [Graphics View]


Sujet :

Qt

  1. #1
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut Boutons, fenêtres et setAutoDefault
    Bonjour,

    Après plus d'une journée à essayer de comprendre pourquoi en appuyant sur entrée alors que j'écrivais dans une zone de texte un bouton était cliqué, j'ai compris que les QDialog activent par défaut le QPushButton::setAutoDefault(true) pour chaque boutons qui sont dessiné à l'intérieur (super intuitif ).

    Le problème est que je ne suis pas le seul à travailler sur ce code (et l'année prochaine, une nouvelle équipe travaillera dessus) donc la solution consistant à mettre des QPushButton::setAutoDefault(false) à chaque bouton n'est pas viable.
    On pourrait certes remplacer la QDialog par une QFrame, QWidget ou QMainWindow mais nous pensons que ce serait bien de pouvoir "cliquer" sur un bouton bien particulier en appuyant sur entrée.

    J'ai donc X boutons dans ma QDialog, Y autres boutons potentiels qui pourront être rajouté par de futures équipes et un unique bouton de validation qui sera cliqué lorsqu'on appuiera sur entré.

    Malheureusement, je ne trouve pas comment désactiver le QPushButton::setAutoDefault(true) par défaut sur les boutons dans un QDialog ni même comment "accepter" les appuis de la touche "entrée" comme cliquant un bouton ayant le QPushButton::setAutoDefault(true) dans un QFrame, QWidget ou QMainWindow.

    Ce qui m'étonne vraiment...

    Sinon je pourrais certes récupérer les événements clavier mais je préférerais si possible éviter de devoir créer une classe juste pour cela.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    La méthode naïve et barbare serait de réimplémenter QPushButton pour lui donner un constructeur qui désactive l'option.
    Sinon, je reste étonné du comportement décrit.

    Sinon, faites vous une fonction, qui selon le type/fonction du bouton se met en défaut ou pas, un peu comme une factory de bouton.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Bonjour,

    La méthode naïve et barbare serait de réimplémenter QPushButton pour lui donner un constructeur qui désactive l'option.
    Sinon, je reste étonné du comportement décrit.

    Sinon, faites vous une fonction, qui selon le type/fonction du bouton se met en défaut ou pas, un peu comme une factory de bouton.
    J'ai trouvé une solution toute bête :
    Apparement, lors de l'insertion d'un QPushButton, le QPushButton::setAutoDefault(true) est mis à true mais pas lors de son initialisation.

    Je suis passé à côté en lisant la doc
    Citation Envoyé par http://doc.qt.digia.com/stable/qpushbutton.html#autoDefault-prop
    This property's default is true for buttons that have a QDialog parent; otherwise it defaults to false.
    Par contre dans la doc de QDialog
    Citation Envoyé par http://qt-project.org/doc/qt-4.8/qdialog.html
    and they can have default buttons
    Citation Envoyé par http://qt-project.org/doc/qt-4.8/qdialog.html
    Default Button

    A dialog's default button is the button that's pressed when the user presses Enter (Return). This button is used to signify that the user accepts the dialog's settings and wants to close the dialog. Use QPushButton::setDefault(), QPushButton::isDefault() and QPushButton::autoDefault() to set and control the dialog's default button.
    Il n'y a pas vraiment d'explication sur le fonctionnement des autoDefault button

    Apparemment, le QDialog va regarder le premier QPushButton ayant le QPushButton::setAutoDefault(true) à true pour servir de "bouton par défaut".
    Mais il semblerait qu'on ne puisse avoir qu'un bouton par défaut (ce qui semble logique) donc si on spécifie avec QPushButton::setDefault(true) que le QPushButton est l'unique bouton par défaut, tout va bien.

    Je trouve que les autoDefault button sont un peu tiré par les cheveux....

    EDIT : encore mieux, il faut que le QPushButton::setDefault(true) ne soit fait qu'après avoir ajouté le bouton à la QDialog (et il me semble même avant d'appeler QDialog::show() ) sinon cela ne marche pas

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

Discussions similaires

  1. Récupérer clic bouton fenêtre Windows
    Par DeadlyLullaby dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/03/2014, 07h14
  2. Comment savoir si le bouton d'une fenêtre est enfoncé ?
    Par Lecerf dans le forum Composants VCL
    Réponses: 7
    Dernier message: 21/09/2005, 19h38
  3. Bouton "croix" de fenêtre inopérant
    Par kobe dans le forum Langage
    Réponses: 17
    Dernier message: 02/09/2005, 11h22
  4. Quatrième bouton sur la barre de titre d'une fenêtre
    Par Yacine95000 dans le forum MFC
    Réponses: 8
    Dernier message: 02/06/2004, 17h54
  5. Griser le bouton "maximiser" d'une fenêtre
    Par kurkaine dans le forum C++Builder
    Réponses: 5
    Dernier message: 13/02/2004, 00h11

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