QT C++中QLineEdit添加正则验证后回车键触发功能失效问题咨询
问题原因
QLineEdit的returnPressed信号默认触发前提是当前输入内容完全通过验证器校验,你的代码存在两个导致验证失败的问题:
- 正则规则
[0-9\.\+\-\=\/\*]{100}强制要求输入字符数恰好为100,只要长度不满足就会验证失败 - 原始正则中混入的换行符会破坏字符集匹配逻辑,即使删除换行,长度限制的问题依然存在
解决方案
方案1:修正正则规则(推荐,不改动原有信号绑定逻辑)
如果你是需要限制最多输入100个合法字符,将长度限定符改为{0,100}即可,可匹配空输入到100个合法字符的所有情况,符合绝大多数输入场景:// 正则匹配0-100个数字、.、+、-、=、/、*字符 QRegularExpression r(R"([0-9\.\+\-\=\/\*]{0,100})"); ui->lineEdit->setValidator(new QRegularExpressionValidator(r, this));如果要求至少输入1个字符,将
{0,100}改为{1,100}即可。方案2:捕获回车键事件(适用需要无论验证是否通过都要响应回车的场景)
给QLineEdit安装事件过滤器,直接捕获回车键按下事件触发对应逻辑:- 在MainWindow头文件的protected块中声明事件过滤函数:
bool eventFilter(QObject *watched, QEvent *event) override;- 在MainWindow构造函数中为lineEdit安装事件过滤器:
ui->lineEdit->installEventFilter(this);- 实现事件过滤函数:
bool MainWindow::eventFilter(QObject *watched, QEvent *event) { if (watched == ui->lineEdit && event->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event); if (keyEvent->key() == Qt::Key_Return || keyEvent->key() == Qt::Key_Enter) { on_pushButton_14_clicked(); return true; } } return QMainWindow::eventFilter(watched, event); }
内容的提问来源于stack exchange,提问作者Alora
相关产品推荐
相关产品推荐

