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 :

QLineEdit : problème de sélection

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut QLineEdit : problème de sélection
    Bonjour,

    je rencontre actuellement un petit problème avec un QLineEdit personnalisé.

    Lorsque je clic dessus, celui-ci est censé sélectionner l'intérieur de la zone de saisie si celle-ci ne l'est pas déjà, quelque chose de simple en fait.

    Seulement, en ré-implémentant MousePressEvent dans ma QLineEdit, j'ai quelque petit soucis pour sélectionner le champ. Voici le bout de code concerné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void TNumberArea::mousePressEvent(QMouseEvent *mouseEvent)
    {
      QLineEdit::mousePressEvent(mouseEvent);
     
      cout << this->hasSelectedText() << endl;
     
      if (!this->hasSelectedText())
         this->selectAll();
     
      cout << this->hasSelectedText() << endl;
    }
    Bizarrement, lorsque je lance le programme, j'obtiens en sortie deux "0", autrement dit, même après le "this->SelectAll()", le texte n'est pas sélectionné.

    J'ai effectué quelques recherches et j'ai trouvé ceci :

    The solution is to have a single-shot timer in the focusinEvent that calls a function that just calls selectAll();

    QTimer::singleShot(0, this, SLOT(reallySelect()));

    No idea why. It just works
    Si c'est la bonne solution, je ne comprends pas non plus pourquoi ^^.

    Aussi, pour rester dans le domaine, je ne saisie pas complétement la différence entre l'événement focusInEvent et MousePressEvent. Lorsque l'on clic sur la QLineEdit, celle-ci est cliquée et a le focus non ?

    Avez-vous une idée ?

    Merci beaucoup ! :-)

  2. #2
    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
    Bonjour,

    Déjà je te conseille d'utiliser QDebug à la place de cout, simple avis personnel (berk la STL dans du code Qt...).

    Ensuite, cliquer dessus n'est pas le seul moyen de lui donner le focus (tu peux faire avec la touche tab par exemple, ou dans le code avec setFocus() ou en gérant le focusProxy, c'est à dire que en gros quand tu cliques sur un conteneur de la QLineEdit, cela lui donne le focus). Donc je pense qu'il vaudrait mieux mettre ton code dans le focusInEvent().

    Le singleshot je pense va rajouter un timerevent à la queue des autres, ce qui va exécuter le code le plus tôt possible mais après les événements déjà déclenchés, dont un d'entre eux doit gêner le selectAll(). Pour en savoir plus, tu peux loguer dans focusInEvent et mousePressEvent pour savoir lequel se déclenche en premier, regarder l'implémentation par défaut de ces événements dans le code source de Qt pour voir ce qu'il s'y passe...

  3. #3
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut
    Bonjour et merci Troudhyl pour ta réponse :-)

    Merci pour le conseil concernant Qdebug()! Dire que je l'utilisais avant, j'ai besoin de me rafraîchir la mémoire

    Alors j'ai réimplémenté focusInEvent et focusOutEvent dans mon QLineEdit.

    Seulement, bien que le focus fonctionne pour les deux événements avec la touche tab du clavier, lorsque je clic sur la zone de saisie, l'appel aux événements ne se fait pas. Pourtant le focusInEvent doit gérer le clic en même temps non ?

    Aussi, second problème, mon QLineEdit est initialement selectionné (donc la zone de saisie à un fond bleu spécifique à la sélection). Or, malgré un deselect() dans le constructeur après un setText(), la zone apparaît toujours en bleu donc sélectionné initialement. Une idée ?

    Merci beaucoup :-)

Discussions similaires

  1. Un problème de sélection
    Par cocaetjusdorange dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 10/04/2006, 17h02
  2. [XPath] Problème de sélection de noeuds
    Par Heriquet dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 18/02/2006, 10h22
  3. [VBA] Problème de sélection de feuille
    Par ptitsoleil87 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/12/2005, 10h44
  4. Problème de sélection sous IE
    Par titisite dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 27/12/2004, 14h05
  5. [CR] Problème de sélection sur un champ date
    Par noluc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/11/2003, 16h56

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