Как изменить фокус QLineEdit автоматически на другой QLineEdit после того, как ввод удовлетворяет критерию?

У меня два QLineEdit виджеты, edt1 а также edt2, Каждый QLineEdit может принимать только две цифры. После ввода хх (например, 10) в edt1, который может удовлетворить входной критерий, как изменить фокус с edt1 в edt2 автоматически.

Есть ли встроенная функция, чтобы использовать это, чтобы это произошло? Или кто-нибудь может рассказать о том, как это сделать? Спасибо.

1 ответ

Решение

Вы должны проверить, если edt1.hasAcceptableInput() каждый раз textChanged() сигнал испускается, и вызов edt2.setFocus() если это так.

#include <QtWidgets>

int main(int argc, char** argv)
{
    QApplication a{argc, argv};

    QWidget w;
    QLineEdit lineEdit1;
    QLineEdit lineEdit2;
    //validator to accept two digits
    QRegExpValidator validator{QRegExp{"\\d{2}"}};
    lineEdit1.setValidator(&validator);
    lineEdit2.setValidator(&validator);
    QVBoxLayout layout{&w};
    layout.addWidget(&lineEdit1);
    layout.addWidget(&lineEdit2);
    w.show();

    QObject::connect(&lineEdit1, &QLineEdit::textChanged, [&](){
        if(lineEdit1.hasAcceptableInput())
            lineEdit2.setFocus();
    });

    return a.exec();
}
Другие вопросы по тегам