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