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