1

我无法验证价格。

接受价格示例:10,00 / 100,00 / 1.000,00

不接受:10 / 100 / 1000.00

代码,但是这个传递 100 / 10 / 1000.00

 bool ok;
 QLocale::setDefault(QLocale(QLocale::Portuguese, QLocale::Brazil));
 QLocale brazil; // Constructs a default QLocale
 QString text;
 if(ui->price->text().length() <= 2){
   qDebug() << text.sprintf("%6.2f", ui->price->text().toDouble()); //format 50 = 50.00
 }
 brazil.toDouble(ui->price->text(), &ok);
 qDebug() <<  ok;
4

1 回答 1

0

如您所料,验证失败,Qt 4.8 和最新的 Qt 5。检查您是否可以在您的平台上正确设置 QLocale。brazil.decimalPoint() 应该返回 ','

注意:如果您想要区域设置感知格式,则不能使用 QString::sprintf。显式使用 QTextStream 和 setLocale(),因为它将默认为 C 语言环境。

#include <QLocale>
#include <QDebug>
#include <QStringList>

int main()
{
 bool ok;
 QLocale::setDefault(QLocale(QLocale::Portuguese, QLocale::Brazil));
 QLocale brazil; // Constructs a default QLocale
 QStringList textlist = QStringList() << "400.00" << "400" << "400,00";
 for (QString text : textlist) {
     brazil.toDouble(text, &ok);
     qDebug() << text << "is" << ok;
 }

 return 0;

}

产量,

"400.00" is false
"400" is true
"400,00" is true
于 2014-03-17T15:49:09.933 回答