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

标签 c++ qt

我想知道 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/

相关文章:

c++ - 通过 HLSL C++ 时常量缓冲区为空

C++ 库输出

c++ - 通过系统变量设置QT基目录

c++ - 在 Qt 中获取系统用户名

c++ - C++ 中的 union 实际上是一个类吗?

c++ - 如何将 pugi::char_t* 转换为字符串

C++ 调度程序参数传递

python - 如何从不能继承 QObject 的类发出信号?

qt - 使用 QWebPage 创建整个页面屏幕截图

c++ - 错误 : expected primary-expression before ')' token