我想知道如果QlineEdit项无效,QValidator是否可能显示弹出框。我知道Qvalidator只是过滤输入,仅在有效时才显示数据。但是,如果输入无效,我希望它显示我键入的数据并显示工具提示(弹出框)。

最佳答案

您可以将要使用的特定验证器子类化,并覆盖其validate方法,以便在验证后发出信号。例如,对于QIntValidator,您可以按如下方式创建子类(代码仅显示相关摘录):

头文件:

class QIntValidatorReporter : public QIntValidator {
   Q_OBJECT;

public:
   QIntValidatorReporter(int minimum, int maximum, QObject * parent = 0);

   virtual QValidator::State validate(QString& input, int& pos ) const;

signals:
   void setError(const QString& msg) const;
};

.cpp文件:
QValidator::State QIntValidatorReporter::validate(QString& input, int& pos ) const {
   QValidator::State result = QIntValidator::validate(input, pos);

   if (result == QValidator::Invalid) {
      emit setError(QString("Allowed range: %1 to %2").arg(bottom()).arg(top()));
   } else {
      emit setError("");
   }

   return result;
}

通过根据需要将setError信号连接到任何插槽,可以实现所需的功能以报告验证状态。

有关完整的示例项目,请参见https://github.com/afester/StackOverflow/tree/master/Qt/QValidator

09-05 22:55