Анализ существующего актуального списка валют
Я нашел коды валют JSON список https://gist.github.com/Fluidbyte/2973986.
Этот список регулярно обновляется.
Как можно проанализировать список. Загрузите необработанный JSON текст по ссылке. Сохраните его в текстовом файле в кодировке UTF-8. Разберите его как-нибудь по поводу написанного ниже.
#include <QtWidgets/QApplication>
#include <QVariantMap>
#include <QStringList>
#include <QJsonDocument>
#include <QJsonObject>
#include <QFile>
#include <QDebug>
#include <QPlainTextEdit>
using CurrencyMap = QMap<QString, QVariantMap>; // Use three-letter code as a key
using CurrencyMapIterator = QMapIterator<QString, QVariantMap>;
CurrencyMap parseCurrencyDataFromJson(QByteArray utf8Json)
{
CurrencyMap ret;
QJsonParseError parseError;
QJsonDocument document = QJsonDocument::fromJson(utf8Json, &parseError);
if (parseError.error != QJsonParseError::NoError)
{
qWarning() << parseError.errorString();
}
if (!document.isNull())
{
QJsonObject jobject = document.object();
// Iterate over all the currencies
for (QJsonValue val : jobject)
{
// Object of a given currency
QJsonObject obj = val.toObject();
// Three-letter code of the currency
QString name = obj.value("code").toString();
// All the data available for the given currency
QVariantMap fields = obj.toVariantMap();
ret.insert(name, fields);
}
}
return ret;
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QPlainTextEdit plainTextEdit;
plainTextEdit.show();
// File saved from the GitHub repo
QFile file("curr.json");
if (file.open(QIODevice::ReadOnly))
{
QByteArray jsonData = file.readAll();
CurrencyMap currencyMap = parseCurrencyDataFromJson(jsonData);
// Output all the available currency symbols to the plainTextEdit
CurrencyMapIterator currency(currencyMap);
while (currency.hasNext())
{
currency.next();
QString code = currency.key();
QVariantMap fileds = currency.value();
QStringList currencyInfo
{
code,
fileds.value("symbol").toString(),
fileds.value("symbol_native").toString()
};
plainTextEdit.appendPlainText(currencyInfo.join('\t'));
}
QString total = QString("\nTotal Available Currencies Count = %1")
.arg(currencyMap.count());
plainTextEdit.appendPlainText(total);
}
return a.exec();
}
QChar-Limited Solution
QChar
и решение на основе Unicode. Но учтите, что QChar
сам поддерживает коды максимум до 0xFFFF. Следовательно, таким образом можно получить только ограниченное количество символов.
// In Qt, Unicode characters are 16-bit entities.
// QChar itself supports only codes with 0xFFFF maximum
QList<QChar> getAllUnicodeSymbolsForCategory(QChar::Category cat)
{
QList<QChar> ret;
// QChar actually stores 16-bit values
const static quint16 QCharMaximum = 0xFFFF;
for (quint16 val = 0; val < QCharMaximum; val++)
{
QChar ch(val);
if (ch.category() == cat)
{
ret.append(ch);
}
}
return ret;
}
Использование
QList<QChar> currencies = getAllUnicodeSymbolsForCategory(QChar::Symbol_Currency);