Set QLineEdit se concentrer dans Qt
Question
J'ai une question qt. Je veux que le widget QLineEdit pour avoir le focus au démarrage de l'application. Prenez le code suivant par exemple:
#include <QtGui/QApplication>
#include <QtGui/QHBoxLayout>
#include <QtGui/QPushButton>
#include <QtGui/QLineEdit>
#include <QtGui/QFont>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget *window = new QWidget();
window->setWindowIcon(QIcon("qtest16.ico"));
window->setWindowTitle("QtTest");
QHBoxLayout *layout = new QHBoxLayout(window);
// Add some widgets.
QLineEdit *line = new QLineEdit();
QPushButton *hello = new QPushButton(window);
hello->setText("Select all");
hello->resize(150, 25);
hello->setFont(QFont("Droid Sans Mono", 12, QFont::Normal));
// Add the widgets to the layout.
layout->addWidget(line);
layout->addWidget(hello);
line->setFocus();
QObject::connect(hello, SIGNAL(clicked()), line, SLOT(selectAll()));
QObject::connect(line, SIGNAL(returnPressed()), line, SLOT(selectAll()));
window->show();
return app.exec();
}
Pourquoi line->setFocus()
met l'accent sur le démarrage widget ligne @app que si elle est placée après la pose les widgets et si elle est utilisée avant qu'il ne fonctionne pas?
La solution
Le focus clavier est lié à Widget QWidget::setFocus
dernier appel.
J'envisager d'utiliser une sous-classe de QWidget
pour votre fenêtre principale qui l'emporte sur la
Autres conseils
Une autre astuce qui pourrait fonctionner est en utilisant la minuterie de singleshot
:
QTimer::singleShot(0, line, SLOT(setFocus()));
En effet, cette invoque la fente de setFocus()
de l'instance de QLineEdit
juste après le système d'événements est « libre » pour ce faire, à savoir un certain temps après le widget est complètement construite.
Peut-être est une mise à jour de la dernière réponse était en 2012 et l'OP modifié en dernier la question en 2014. Ils ont ainsi je ce au travail était de changer la politique et mise au point.
line->setFocusPolicy(Qt::StrongFocus);
line->setFocus();
Dans Qt setFocus () est une fente, vous pouvez essayer une autre méthode surchargée qui prend un paramètre Qt :: FocusReason comme la ligne ci-dessous:
line->setFocus(Qt::OtherFocusReason);
Vous pouvez lire sur les options de mise au point raison dans le lien suivant: