【问题标题】:QDoubleValidator accepts multiple decimal pointsQDoubleValidator 接受多个小数点
【发布时间】:2014-12-26 11:01:34
【问题描述】:

我将QDoubleValidator 用于我的QLineEdit。应用程序语言环境(在 QtCreator 中设置)是QLocale::German

现在,当我输入一个有效的双精度(使用点或逗号作为小数分隔符)写入 textedit 以及将字符串转换为浮点数时,效果非常好。但是验证器还允许我编写带有多个小数分隔符的内容。 123.567,890,,03.4... 之类的字符串得到验证,但无法转换为浮点数。

有没有办法告诉QDoubleValidator 只验证真实数字,而不仅仅是不带字母字符的字符串?

我基本上想要一个验证器,它只验证字符串,可以转换为浮点数 使用默认语言环境或德语语言环境。

【问题讨论】:

标签: c++ qt qt5 qlineedit qvalidator


【解决方案1】:

到目前为止我还没有使用过QDoubleValidator,但我可以通过使用QRegExpValidator来实现这种行为:

QRegExpValidator* rxv = new QRegExpValidator(QRegExp("[+-]?\\d*[\\.,]?\\d+"), this);
lineedit->setValidator(rxv);

【讨论】:

  • 不起作用:当 lineedit 中已经有文本时,我可以输入我想要的任何内容。当 lineedit 为空时,我无法输入任何内容。 ://
  • 你的意思是\\d[\\.,]?而不是\\d\\[.,]?吗?
  • 您当然是对的,感谢您的通知。我编辑答案
【解决方案2】:

如果您只想将内容转换为浮点数并且不需要语言环境规范,您可以使用QRegExpValidator 和下一个深度regexp

ui->lineEdit->setValidator(new QRegExpValidator(QRegExp("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")));

【讨论】:

  • 我的解决方案:QRegExpValidator *validate = new QRegExpValidator(QRegExp("[0-9]*([\\.,]?[0-9]{0,2})?")) ;
猜你喜欢
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
  • 2023-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多