Solución:
El enfoque del teclado está relacionado con el orden de tabulación del widget y el orden de tabulación predeterminado se basa en el orden en que se construyen los widgets. Por lo tanto, la creación de más widgets cambia el enfoque del teclado. Es por eso que debes hacer el QWidget::setFocus
llame al último.
Consideraría usar una subclase de QWidget
para su ventana principal que anula el showEvent
función virtual y luego establece el foco del teclado en la lineEdit
. Esto tendrá el efecto de dar siempre la lineEdit
enfoque cuando se muestra la ventana.
Otro truco que podría funcionar es usar el singleshot
Temporizador:
QTimer::singleShot(0, line, SLOT(setFocus()));
Efectivamente, esto invoca la setFocus()
ranura de la QLineEdit
instancia justo después de que el sistema de eventos sea “libre” para hacerlo, es decir, en algún momento después de que el widget esté completamente construido.
Quizás esta sea una actualización, ya que la última respuesta fue en 2012 y el OP editó la pregunta por última vez en 2014. La forma en que hice que esto funcionara fue cambiar la política y luego establecer el enfoque.
line->setFocusPolicy(Qt::StrongFocus);
line->setFocus();