2014-10-30 85 views
1

我对我的QLineEdit使用QDoubleValidator。应用程序语言环境(在QtCreator中设置)是QLocale::GermanQDoubleValidator接受多个小数点

现在,当我输入一个有效的双精度(使用点或逗号作为小数点分隔符)写入textedit以及将字符串转换为浮点数时,效果非常好。但验证器也让我用多个小数点分隔符写东西。像123.567,890,,03.4...这样的字符串会得到验证,但不能转换为浮点数。

有没有办法告诉QDoubleValidator只验证real数字而不只是没有字母字符的字符串?

我基本上想要验证器,只验证字符串,可以使用默认区域设置或德语区域设置转换为浮动 。

+1

为什么不使用['QDoubleSpinBox'](http://doc.qt.io/qt-5/qdoublespinbox.html)?它会自动使用系统区域设置,如果你不想看到,你可以[隐藏上/下按钮](http://doc.qt.io/qt-5/qabstractspinbox.html#buttonSymbols-prop)他们。 – 2015-05-26 19:06:36

回答

2

我没用过QDoubleValidator到目前为止,但我可以通过实现这样的行为QRegExpValidator

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

不起作用:当lineed中已经有文本时,我可以输入任何我想要的内容。当lineedit为空时,我无法输入任何内容。 :/ – Uroc327 2014-10-30 12:27:21

+0

你可能是指'\\ d [\\。,]?'而不是'\\ d \\ [。,]?'? – Uroc327 2014-10-30 12:31:02

+0

你当然是对的,谢谢你的通知。我编辑答案 – Bowdzone 2014-10-30 12:47:24

1

如果你只想要你的内容转换成浮动和你不希望环境规范,你可以使用QRegExpValidator与下一个深regexp

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

我的解决方案:QRegExpValidator * validate = new QRegExpValidator(QRegExp(“[0-9] *([\\。,]?[0-9] {0,2})?”)); – blackmoon 2017-12-15 16:06:30