获取QLocale :: Country的国家/地区代码

时间:2014-06-08 18:11:39

标签: c++ qt

我正在尝试查找给定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)

2 个答案:

答案 0 :(得分:2)

一般情况下,鉴于您想要的功能无法直接使用,请在错误跟踪器上submit a feature request

除此之外,您无法使用AnyLanguage 构建QLocale对象。这绝对没有意义--QLocale对象完全标识特定的区域设置。应该为加拿大选择哪一个,fr_CAen_CA

解决方案:使用

QList<QLocale> locales = QLocale::matchingLocales(QLocale::AnyLanguage,
                                                  QLocale::AnyScript,
                                                  QLocale::Canada);

然后获取列表中的第一个(如果存在)并提取国家名称。

答案 1 :(得分:1)

有一个静态函数QLocale::countryToString(链接到Qt 4.8,因此它是相当古老的API)。