signal example c++ qt qlineedit

c++ - example - Establezca el foco QLineEdit en Qt



qlineedit qt example (4)

En Qt setFocus () es una ranura, puede probar otro método sobrecargado que toma un parámetro Qt :: FocusReason como la línea que se muestra a continuación:

line->setFocus(Qt::OtherFocusReason);

Puede leer sobre las opciones de motivos de enfoque en el siguiente enlace:

http://doc.trolltech.com/4.4/qt.html#FocusReason-enum

Estoy teniendo una pregunta qt. Quiero que el widget QLineEdit tenga el foco al inicio de la aplicación. Tome el siguiente código, por ejemplo:

#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(); }

¿Por qué line->setFocus() establece el foco en el widget de línea @app startup solo si se coloca después de diseñar los widgets y si se usa antes de que no funcione?


Otro truco que podría funcionar es usar el temporizador singleshot:

QTimer::singleShot(0, line, SLOT(setFocus()));

Efectivamente, esto invoca la ranura setFocus () de la instancia de QLineEdit justo después de que el sistema de eventos sea "libre" para hacerlo, es decir, algún tiempo después de que el widget esté completamente construido.


El enfoque del teclado está relacionado con el orden de las pestañas de widgets, y el orden de pestañas predeterminado se basa en el orden en que se construyen los widgets . Por lo tanto, crear más widgets cambia el foco del teclado. Es por eso que debe hacer que la llamada a QWidget :: setFocus dure.

Consideraría usar una subclase de QWidget para su ventana principal que anule la función virtual showEvent y luego ajuste el foco del teclado a la edición de línea. Esto tendrá el efecto de proporcionar siempre el foco de edición de línea cuando se muestre la ventana.


Tal vez esta sea una actualización ya que la última respuesta fue en 2012 y el OP editó por última vez la pregunta en 2014. La forma en que lo hice funcionar fue cambiar la política y luego establecer el foco.

line->setFocusPolicy(Qt::StrongFocus); line->setFocus();