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 ! :-)