我有一个带掩码的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
答案 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
}