Преобразование числа в строку валюты с использованием класса 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 :: 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"
        }

    }

}

// Результат введите описание изображения здесь

здесь мой системный языковой стандарт по умолчанию установлен как Hindi India (через настройку региона и языка Windows 7)


person Programmer    schedule 04.05.2014    source источник
comment
Какой твой язык? Почему вы устанавливаете не правильный язык, а AnyLanguage?   -  person lpapp    schedule 04.05.2014
comment
Я пробовал построить QLocale с разными индийскими языками в качестве аргумента. Результат тот же. Это то, что я имел в виду, когда сказал: «Я пробовал выбирать разные скрипты локали и языки локали».   -  person Programmer    schedule 04.05.2014
comment
Может быть, вы сможете перечислить то, что пробовали до сих пор? Какой язык вы устанавливаете в своей системе, когда она работает?   -  person lpapp    schedule 04.05.2014
comment
Я отредактировал свой вопрос. В моем вопросе содержится образец кода. Надеюсь, теперь все ясно.   -  person Programmer    schedule 04.05.2014


Ответы (1)


Мне это кажется ошибкой; но если вы хотите проверить значения, которые ваш системный языковой стандарт использует по умолчанию, вы можете попробовать:

qDebug() << QLocale().languageToString(QLocale().language());
qDebug() << QLocale().scriptToString(QLocale().script());

У меня в качестве сценария отображается «По умолчанию», но если я это сделаю:

qDebug() << QLocale().script();

Я получаю «0», что в документации является значением QLocale :: AnyScript. Я бы сказал, что если по умолчанию вы выбрали правильный вариант, но указали тот же язык, скрипт и страну в ctor, что-то не так.

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

person CodeLurker    schedule 31.08.2016