Как я могу преобразовать персидские числа в английские числа с помощью QLocale?

Я хочу преобразовать персидские числа в английские числа, используя QLocale, я написал этот код, но он не работает:

int main(void)
{
    QLocale english_number(QLocale::Language::English, QLocale::Country::UnitedStates);
    QTime time;

    time = english_number.toTime("۱۲:۳۲", "HH:mm");

    qDebug() << time;
}

Вывод в консоль:

QTime(Invalid)

Но можно преобразовать английские числа в персидские числа:

QLocale persian_number(QLocale::Language::Persian, QLocale::Country::Iran);

time = persian_number.toTime("13:32", "HH:mm");

qDebug() << time;

Консольный вывод:

QTime("13:32:00.000")

Где я неправ?

  • Qt: 5.14.1
  • ОС: Archlinux-5.6.7-arch1-1
  • Компилятор: GCC 9.3

2 ответа

Решение

Я думаю, что это ошибка Qt, потому что я делал это перед преобразованием в QTime нам нужно преобразовать персидские числа в int а затем преобразовать в QTime.

Приведенная ниже статическая функция может быть полезна для преобразования строки, содержащей номер Persion, в английское число:

      QString Helper::PersianToEnglish(QString persianStr)
{
    QString per = "۰۱۲۳۴۵۶۷۸۹";
    for (int i = 0; i < 10;i++) {
        while(persianStr.contains(per[i]))
        {
            int idx = persianStr.indexOf(per[i]);
            if(idx == -1)
                break;
            persianStr.replace(idx,1,QString::number(i));
        }
    }
    return persianStr;
}
Другие вопросы по тегам