Frage
Ich habe eine qt Frage. Ich möchte das QLineEdit Widget den Fokus beim Start der Anwendung haben. Nehmen Sie den folgenden Code zum Beispiel:
#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();
}
Warum line->setFocus()
setzt den Fokus auf dem Start Widget @app Linie nur, wenn sie die Widgets nach Auslegen platziert wird und wenn verwendet, bevor es nicht funktioniert?
Lösung
Tastaturfokus bezieht a href Widget <= "https: //doc.qt.io/qt-5/qwidget.html#setTabOrder“rel = "nofollow noreferrer"> Tab-Reihenfolge , und die Standard-Tab-Reihenfolge auf der Reihenfolge, in der Widgets aufgebaut ist . Daher ändert Fokus der Tastatur mehr Widgets zu erstellen. Deshalb müssen Sie die machen QWidget::setFocus
rufen letzte.
Ich würde eine Unterklasse von QWidget
für Ihre Hauptfenster, das die
Andere Tipps
Ein weiterer Trick, die funktionieren könnte, ist durch die singleshot
Timer:
QTimer::singleShot(0, line, SLOT(setFocus()));
Tatsächlich ruft dies der setFocus()
Schlitz des QLineEdit
Beispiel direkt nach dem Event-System „frei“ ist, dies zu tun, das heißt irgendwann nach dem Widget vollständig aufgebaut ist.
Vielleicht ist dies ein Update als die letzte Antwort im Jahr 2012 war und das OP zuletzt bearbeiten die Frage im Jahr 2014. Sie so, wie ich dies an der Arbeit bekam, war die Richtlinie zu ändern und dann den Fokus.
line->setFocusPolicy(Qt::StrongFocus);
line->setFocus();
In Qt setFocus () ist ein Schlitz, können Sie andere überladene Methode versuchen, die eine Qt :: FocusReason Parameter wie die Linie unten nimmt:
line->setFocus(Qt::OtherFocusReason);
Sie können über Fokus Grund Optionen in dem folgenden Link lesen:
http://doc.trolltech.com/4.4/qt.html # FocusReason-Enumeration