我正在尝试查找给定QLocale::Country值的国家/地区代码。在手册中我只找到了这个功能,它做了类似的事情:QLocale::name。
QString QLocale :: name()const
以字符串形式返回此语言环境的语言和国家/地区 form" language_country",其中language是一个小写的双字母ISO 639语言代码,国家是大写,两个或三个字母 ISO 3166国家代码。
返回值的第二部分正是我需要的,所以我构造了以下函数:
QString getCountryCode(QLocale::Country c)
{
return QLocale(QLocale::AnyLanguage, c).name().split('_').at(1).toLower();
}
奇怪的是,如果我按以下方式调用此函数:
qDebug() << getCountryCode(QLocale::Canada);
它将产生此输出:
"us"
我原本预计&#34; ca&#34;! 另一方面,如果我称之为:
qDebug() << getCountryCode(QLocale::Hungary);
然后它会产生正确的答案:
"hu"
我在这里缺少什么? (我使用的是Qt 5.2)
答案 0 :(得分:2)
一般情况下,鉴于您想要的功能无法直接使用,请在错误跟踪器上submit a feature request。
除此之外,您无法使用AnyLanguage
构建QLocale对象。这绝对没有意义--QLocale对象完全标识特定的区域设置。应该为加拿大选择哪一个,fr_CA
或en_CA
?
解决方案:使用
QList<QLocale> locales = QLocale::matchingLocales(QLocale::AnyLanguage,
QLocale::AnyScript,
QLocale::Canada);
然后获取列表中的第一个(如果存在)并提取国家名称。
答案 1 :(得分:1)
有一个静态函数QLocale::countryToString(链接到Qt 4.8,因此它是相当古老的API)。