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