C++ 正在获取QLocale::country的国家/地区代码

C++ 正在获取QLocale::country的国家/地区代码,c++,qt,C++,Qt,我正在尝试查找给定值的国家代码。在手册中我只找到了这个函数,它做了类似的事情: QString QLocale::name()常量 以字符串形式返回此区域设置的语言和国家/地区 格式为“language_country”,其中语言为小写、两个字母的ISO 639语言代码,国家是大写字母,两个或三个字母 ISO 3166国家代码 返回值的第二部分正是我需要的,因此我构造了以下函数: QString getCountryCode(QLocale::Country c) { return QL

我正在尝试查找给定值的国家代码。在手册中我只找到了这个函数,它做了类似的事情:

QString QLocale::name()常量

以字符串形式返回此区域设置的语言和国家/地区 格式为“language_country”,其中语言为小写、两个字母的ISO 639语言代码,国家是大写字母,两个或三个字母 ISO 3166国家代码

返回值的第二部分正是我需要的,因此我构造了以下函数:

QString getCountryCode(QLocale::Country c)
{
    return QLocale(QLocale::AnyLanguage, c).name().split('_').at(1).toLower();
}
奇怪的是,如果我按以下方式调用此函数:

qDebug() << getCountryCode(QLocale::Canada);
我期待着“ca”! 另一方面,如果我这样称呼它:

qDebug() << getCountryCode(QLocale::Hungary);

我错过了什么?(我使用的是Qt5.2)

一般来说,如果您想要的功能无法直接使用,请在bugtracker上查看

除此之外,您不能使用
AnyLanguage
构建QLocale对象。这毫无意义——QLocale对象完全标识特定的区域设置。加拿大应该选择哪一个,
fr\u-CA
还是
en\u-CA

解决方案:使用

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

然后选择列表中的第一个(如果存在)并提取您正在执行的国家名称。

这是因为加拿大的地区是en_us。第二部分应该是ISO 3166国家代码。如果是加拿大,则为“ca”。或者这个函数真的只是关于语言吗?如果是这样的话,我如何获得国家代码?顺便说一句,这是有道理的,因为我在讲英语的国家往往会得到不正确的结果。虽然我希望在英国得到一个不同的结果,但我仍然得到“us”而不是“gb”。在德国“de”和奥地利“at”的情况下,我得到了正确的结果。通常是QLocale::Canada?的国家代码。我想要一个函数,它将相应的国家代码返回给任何QLocale::country值。非常感谢,这非常有用。如果函数确实不可用,这可能是我们能得到的最接近的函数。尽管仍然存在一个问题:在29个国家中,没有匹配的地区。所以我的最后一个问题是:如果我真的想让它在任何国家生效,除了一个巨大的转变,我还有什么选择?
"hu"
QList<QLocale> locales = QLocale::matchingLocales(QLocale::AnyLanguage,
                                                  QLocale::AnyScript,
                                                  QLocale::Canada);