QT QLineEdit焦点

时间:2017-01-24 07:45:46

标签: qt

我有一个带掩码的QLineedit和qvalidator(子类)

如果输入与掩码或验证器不匹配,如何防止移开焦点?

因为掩码和qvalidator都不会阻止从QLineEdit移开焦点。

编辑完成不起作用,因为:

void QLineEdit :: editingFinished()

按下Return或Enter键或线编辑失去焦点时会发出此信号。请注意,如果在行编辑中设置了validator()或inputMask()并按下了/ return,则仅当输入跟随inputMask()并且validator()返回QValidator时才会发出editingFinished()信号: :可接受“

void MainWindow:n_lineEdit_editingFinished()
{
    if (ui->lineEdit->text() != "1111") ui->lineEdit->setFocus();
} 

因此,mask(验证器)不能与editingFinsihed信号一起使用。

加上我试过这个

bool MainWindow::eventFilter(QObject *filterObj, QEvent *event)
{
    if (filterObj == ui->lineEdit ) {
        if(event->type() == QEvent::FocusOut) {
            if (ui->lineEdit->text() != "1111") { ui->lineEdit-`>setFocus();};
        return true;
        };
    };
return false;
}

谢谢Attila

1 个答案:

答案 0 :(得分:0)

来自Qt的文档:

  

请注意,如果在行编辑中设置了验证器,则   returnPressed()/ editingFinished()信号只会发出   验证器返回QValidator::Acceptable

但您可以将注意力集中在每个事件上,而不仅仅是FocusOut

bool MainWindow::eventFilter(QObject *filterObj, QEvent *event)
{
    if (filterObj == ui->lineEdit ) 
        ui->lineEdit->setFocus();

    if(event->type() == QEvent::KeyRelease)
    {
        QKeyEvent* e = (QKeyEvent*)event;

        if(e->key() == Qt::Key_Return
            || e->key() == Qt::Key_Enter)
        {
            /* do what you want here */
        }
    }

    return QObject::eventFilter(filterObj, event); // usual process other events        
}