Преобразование числа в строку валюты с использованием класса QLocale
Я пытаюсь конвертировать числа в строку валюты. я использую QLocale::toCurrencyString()
метод. Когда я устанавливаю свой системный язык (измененный с помощью Windows 7 Регион и настройка языка) как Индия и пытаюсь преобразовать число, скажем 1872345.00
с помощью QLocale().toCurrencyString(1872345.00)
Я получаю ожидаемую строку валюты.
Но когда я звоню QLocale(QLocale::AnyLanguage,QLocale::AnyScript,QLocale::India).toCurrencyString(1872345.00);
Я получаю число отформатировано, как это, что не правильно.
Я пробовал выбирать разные языковые скрипты и языковые стандарты. Но я не смог получить правильный результат. Я использую Qt 5.1.0. Хотя я получаю правильные результаты, когда я использую QLocale().toCurrencyString()
Я не могу использовать его, потому что я имею дело с валютами разных стран, а не только со странами, установленными языком системы. Почему я получаю этот неверный результат? Как конвертировать числа в строку валюты (разных стран)?
Вот пример кода.
//CurrencyForms.h
#ifndef CURRENCYFORMS_H
#define CURRENCYFORMS_H
#include <QObject>
class CurrencyForms : public QObject
{
Q_OBJECT
Q_PROPERTY(QString defaultLocaleString READ defaultLocaleString CONSTANT)
Q_PROPERTY(QString constructedLocaleStringAnyLanguage READ constructedLocaleStringAnyLanguage CONSTANT)
Q_PROPERTY(QString constructedLocaleStringHindiLanguage READ constructedLocaleStringHindiLanguage CONSTANT)
public:
explicit CurrencyForms(QObject *parent = 0);
QString defaultLocaleString();
QString constructedLocaleStringAnyLanguage();
QString constructedLocaleStringHindiLanguage();
};
#endif // CURRENCYFORMS_H
//CurrencyForms.cpp
#include "CurrencyForms.h"
#include<QLocale>
CurrencyForms::CurrencyForms(QObject *parent) :
QObject(parent)
{
}
QString CurrencyForms::defaultLocaleString()
{
return QLocale().toCurrencyString(1872345.00);
}
QString CurrencyForms::constructedLocaleStringAnyLanguage()
{
return QLocale(QLocale::AnyLanguage,QLocale::AnyScript,QLocale::India).toCurrencyString(1872345.00);
}
QString CurrencyForms::constructedLocaleStringHindiLanguage()
{
return QLocale(QLocale::Hindi,QLocale::AnyScript,QLocale::India).toCurrencyString(1872345.00);
}
//main.cpp
#include <QtGui/QGuiApplication>
#include "qtquick2applicationviewer.h"
#include <QQmlContext>
#include <CurrencyForms.h>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QtQuick2ApplicationViewer viewer;
CurrencyForms forms;
viewer.rootContext()->setContextProperty("forms",&forms);
viewer.setMainQmlFile(QStringLiteral("qml/CurrencySymbolTest/main.qml"));
viewer.showExpanded();
return app.exec();
}
//main.qml
import QtQuick 2.0
Rectangle {
width: 720
height: 360
Grid{
columns:1
spacing:2
width: parent.width
Text{
id:defaultLocaleText
width:parent.width
height:60
font.pixelSize:14
elide:Text.ElideRight
text:"QLocale().toCurrencyString(1872345.00)"
verticalAlignment: Text.AlignVCenter
}
Text{
id:defaultLocaleTextResult
width:parent.width
height:60
font.pixelSize:40
elide:Text.ElideRight
text:forms.defaultLocaleString
verticalAlignment: Text.AlignVCenter
color:"green"
}
Text{
id:constructedLocaleStringAnyLanguageText
width:parent.width
height:60
font.pixelSize:14
elide:Text.ElideRight
text:"QLocale(QLocale::AnyLanguage,QLocale::AnyScript,QLocale::India).toCurrencyString(1872345.00)"
verticalAlignment: Text.AlignVCenter
}
Text{
id:constructedLocaleStringAnyResult
width:parent.width
height:60
font.pixelSize:40
elide:Text.ElideRight
text:forms.constructedLocaleStringAnyLanguage
verticalAlignment: Text.AlignVCenter
color:"red"
}
Text{
id:constructedLocaleStringHindiLanguage
width:parent.width
height:60
font.pixelSize:14
elide:Text.ElideRight
text:"QLocale(QLocale::Hindi,QLocale::AnyScript,QLocale::India).toCurrencyString(1872345.00)"
verticalAlignment: Text.AlignVCenter
}
Text{
id:constructedLocaleStringHindiLanguageResult
width:parent.width
height:60
font.pixelSize:40
elide:Text.ElideRight
text:forms.constructedLocaleStringHindiLanguage
verticalAlignment: Text.AlignVCenter
color:"red"
}
}
}
//Результат
здесь мой системный язык по умолчанию установлен как хинди Индия (через Windows 7 Регион и настройка языка)
1 ответ
Это похоже на ошибку для меня; но если вы хотите проверить значения, используемые в вашей системе по умолчанию, вы можете попробовать:
qDebug() << QLocale().languageToString(QLocale().language());
qDebug() << QLocale().scriptToString(QLocale().script());
Мой показывает "По умолчанию" в качестве сценария, но если я сделаю:
qDebug() << QLocale().script();
Я получаю "0", что в документации говорят, что это значение QLocale::AnyScript. Я бы сказал, что если вы по умолчанию получаете правильную вещь, но указали в ctor тот же язык, скрипт и страну, значит что-то не так.
Возможно, вам придется на время написать код и / или добавить отчет об ошибке.