Qt中如何获取QValidator对QLineEdit输入内容的校验结果?
解决方案
你可以通过两种方式获取校验结果:
- 方式1:直接调用
QLineEdit内置的hasAcceptableInput()方法快速判断输入是否符合校验规则,适合只需要知道是否通过校验的场景 - 方式2:手动调用校验器的
validate()方法获取完整的校验状态枚举,适合需要区分无效/中间状态/有效三种结果的场景
修改后的代码示例
#include <QRegularExpression> #include <QRegularExpressionValidator> #include <QMessageBox> #include <QLineEdit> class MainWindow: public QWidget { Q_OBJECT public: MainWindow(){ ... } public slots: void validate(QLineEdit* pUserInput) { QRegularExpression rx("^[^_\\W]+$"); QValidator* validator = new QRegularExpressionValidator(rx, this); pUserInput->setValidator(validator); // 方式1:快速判断是否通过校验 QString validateResult; if (pUserInput->hasAcceptableInput()) { validateResult = "输入校验通过"; } else { validateResult = "输入不符合规则,仅可输入字母、数字,不可包含下划线及特殊字符"; } // 方式2:获取完整校验状态(可选) /* int pos = 0; QString inputContent = pUserInput->text(); QValidator::State state = validator->validate(inputContent, pos); switch(state) { case QValidator::Acceptable: validateResult = "输入校验通过"; break; case QValidator::Intermediate: validateResult = "输入未完成,请继续输入"; break; case QValidator::Invalid: validateResult = "输入不符合规则"; break; } */ QMessageBox message; message.setText(validateResult); message.exec(); } };
注意:如果你的校验规则是固定的,建议把
setValidator的逻辑移到MainWindow的构造函数里执行,不需要每次触发校验的时候重复创建校验器对象,避免不必要的内存开销。
内容的提问来源于stack exchange,提问作者david
相关产品推荐
相关产品推荐

