首页 文章

QT QLineEdit焦点

提问于
浏览
1

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

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

因为掩码和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;
}

谢谢阿提拉

1 回答

  • 0

    从Qt的文档:

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

    但您可以将重点放在每个事件上,而不仅仅是 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        
    }
    

相关问题