如何在Qt中获得城市和国家的列表

How to obtain a list of cities and countries in Qt?

本文关键字:城市 国家 列表 Qt      更新时间:2023-10-16

我正在为Ubuntu Touch开发一个时钟应用程序,在那里我实现了世界时钟功能,用户可以从列表中选择一个城市,并看到当地时间。我使用QTimeZoneQDateTime通过提供其timezoneID来获得城市的当地时间。然而,我无法找到一个Qt库函数,可以为我提供世界上常见城市的列表。

注意:我总是可以通过在XML文件中提供数据来自己创建城市的本地列表。这种方法的问题在于,我需要翻译人员翻译大量的城市列表。这就是为什么我正在寻找更多的内置函数来照顾这个。

是否有这样的Qt函数可以做到这一点?

对于时区的选择,如果你能满足于只列出每个时区具有代表性的主要城市(即80多个城市,而不是200多个城市),你可以参考Android Project下的settings app。在以下目录中-

https://android.googlesource.com/platform/packages/apps/Settings/+/android-2.3.2_r1/res

在每个xml-[language code]文件夹下,都有名为timezones.xml的文件,以各自的语言列出了每个时区的主要代表城市,并附有相应的时区ID。

(英文名称列在xml/timezones.xml下)

Qt中没有这样的函数,但是您可以通过使用一些地图提供程序的API来解决这个问题,例如Google MapsOpenStreetMap等。第二,我100%肯定它有c++的API。你可以用你的语言得到一个城市列表,并尝试使用这个API。大多数(所有?)公共地图提供商都提供国家和城市名称的翻译(注意:city !=拥有300名居民的村庄),因此您只需更改区域设置就可以了。为了防止语言错误,我建议您在内部使用一些语言中立的例程,例如GPS坐标或类似的例程。这一切都归结于地图提供商的数据库结构方式,但我认为我们可以高度自信地说,姓名标签、GPS坐标和——谁知道呢——甚至可能存在时区。

PS: @HappyCoder,是的,有时城市/城镇/村庄和国家的命名有很大的不同。即使在使用拉丁字母的国家,你也可以看到它:

  • 德国(英语)
  • Alemania(西班牙语)
  • 德国(德国)
  • L 'Allemagne(法国)
  • Duitsland(南非荷兰语)

同样适用于城市。如果再加上西里尔语、希腊语、汉语、阿拉伯语等,情况就更糟了。