Qvalidator是否可以显示弹出窗口

时间:2014-01-27 20:21:00

标签: c++ qt

我想知道QValidator是否有可能显示一个弹出框,因为QlineEdit项无效。我知道Qvalidator只是过滤输入,只显示有效的数据。但是我希望它显示我输入的数据并显示工具提示(弹出框),输入无效。

1 个答案:

答案 0 :(得分:0)

您可以对要使用的特定验证器进行子类化并覆盖其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