Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qvalidator是否可以显示弹出窗口_C++_Qt - Fatal编程技术网

C++ Qvalidator是否可以显示弹出窗口

C++ Qvalidator是否可以显示弹出窗口,c++,qt,C++,Qt,我想知道,如果QlineEdit项无效,QValidator是否可能显示一个弹出框。我知道Qvalidator只是简单地过滤输入,仅在数据有效时显示数据。但是,我希望它显示我输入的数据,并在输入无效时显示工具提示(弹出框)。您可以对要使用的特定验证器进行子类化,并覆盖其验证方法,以便它在验证后发出信号。例如,对于QIntValidator,您可以创建一个子类,如下所示(代码仅显示相关摘录): 头文件: class QIntValidatorReporter : public QIntValida

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

您可以对要使用的特定验证器进行子类化,并覆盖其
验证方法,以便它在验证后发出信号。例如,对于
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;
};
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;
}
.cpp文件:

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;
};
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
信号连接到任何插槽,您可以实现报告验证状态所需的功能


有关完整的示例项目,请参阅。

我将尝试将
QValidator
子类化,并重写其
validate
方法。在
validate
内部,从超类调用
validate
,如果它返回invalid,您可以执行任何特定操作,例如发出一些信号,然后显示弹出窗口。也许您还可以连接到
QValidator
changed
信号,但似乎您需要重新验证输入,然后才能获得当前的验证状态