You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:57:01