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

#qt #focus #qlineedit

#qt #фокус #qlineedit

Вопрос:

У меня есть два QLineEdit виджета, edt1 и edt2 . Каждый QLineEdit может принимать только две цифры. После того, как я ввожу xx (например, 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(amp;validator);
    lineEdit2.setValidator(amp;validator);
    QVBoxLayout layout{amp;w};
    layout.addWidget(amp;lineEdit1);
    layout.addWidget(amp;lineEdit2);
    w.show();

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

    return a.exec();
}