如何在输入满足标准后自动将QLineEdit的焦点更改为另一个QLineEdit?

时间:2016-10-21 22:01:40

标签: qt focus qlineedit

我有两个QLineEdit小部件,edt1edt2。每个QLineEdit只能接受两位数。在edt1中输入xx(例如10)后,可以满足输入条件,如何自动将焦点从edt1更改为edt2

是否有用于实现此功能的内置功能?或者,任何人都可以提供有关如何做到这一点的事情?谢谢。

1 个答案:

答案 0 :(得分: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();
}