我想知道如果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。