Преобразование числа в строку валюты с использованием класса QLocale

Я пытаюсь конвертировать числа в строку валюты. я использую QLocale::toCurrencyString() метод. Когда я устанавливаю свой системный язык (измененный с помощью Windows 7 Регион и настройка языка) как Индия и пытаюсь преобразовать число, скажем 1872345.00 с помощью QLocale().toCurrencyString(1872345.00)Я получаю ожидаемую строку валюты.

QLocale (). ToCurrencyString (1872345,00

Но когда я звоню QLocale(QLocale::AnyLanguage,QLocale::AnyScript,QLocale::India).toCurrencyString(1872345.00);Я получаю число отформатировано, как это, что не правильно.

QLocale (QLocale:: AnyLanguage, QLocale:: AnyScript, QLocale:: Индия).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 тот же язык, скрипт и страну, значит что-то не так.

Возможно, вам придется на время написать код и / или добавить отчет об ошибке.

Другие вопросы по тегам