我想知道 QValidator 是否可以在 QlineEdit 项无效时显示弹出框。我知道 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获取完整的示例项目。
关于c++ - Qvalidator 是否可以显示弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21390859/