当前位置:   article > 正文

qt_standard_project_setup

qt_standard_project_setup

qt_standard_project_setup的更先进的国际化。

这个camke命令的官方说明是:项目范围默认标准设置。

该命令在Qt6包的Core组件中定义,可以像这样加载:

 find_package(Qt6 REQUIRED COMPONENTS Core)
  • 这个命令是在Qt 6.3中引入的
  1. qt_standard_project_setup(
  2.      [REQUIRES <version>]
  3.      [SUPPORTS_UP_TO <version>]
  4.      [I18N_TRANSLATED_LANGUAGES <language...>]
  5.      [I18N_SOURCE_LANGUAGE <language>]
  6.  )

该命令简化了设置典型Qt应用程序的任务。通常在第一次find_package(Qt6)调用之后立即调用,通常在顶级CMakeLists.txt文件中,并且在定义任何目标之前。

它可以完成以下工作:

qt_standard_project_setup()命令将CMake的一些变量设置为true,如果它们尚未定义。这将默认启用当前目录范围及其子目录中随后创建的目标的所有与Qt相关的自动生成特性。 CMake会自动包含GNUInstallDirs模块。这会为诸如CMAKE_INSTALL_BINDIR、CMAKE_INSTALL_LIBDIR等变量定义适当的默认值。 在针对Windows时,如果CMAKE_RUNTIME_OUTPUT_DIRECTORY变量尚未设置,它将被设置为${CMAKE_CURRENT_BINARY_DIR}。 针对苹果或Windows之外的目标平台,CMAKE_INSTALL_RPATH将按照以下描述进行扩展。 CMake的USE_FOLDERS属性被设置为ON,而QT_TARGETS_FOLDER被设置为QtInternalTargets。支持文件夹的集成开发环境将在此文件夹中显示Qt内部目标。

自Qt 6.5以来,可以通过选择接受来自更新的Qt版本的更改来更改Qt的CMake API的默认行为。如果指定了REQUIRES,将启用Qt引入的所有建议更改,直到REQUIRES,并且使用较旧的Qt版本将导致错误。如果另外指定了SUPPORTS_UP_TO,还将启用在SUPPORTS_UP_TO版本中引入的任何新更改(但是使用较旧的Qt版本不会导致错误)。这类似于CMake的策略概念(请参阅cmake_policy)。 在支持RPATH的平台上(除了苹果平台),此命令将向CMAKE_INSTALL_RPATH变量附加两个值。附加ORIGIN以便库能够在与自身相同目录中找到其依赖的其他库。还附加ORIGIN/<reldir>,其中<reldir>是从CMAKE_INSTALL_BINDIR到CMAKE_INSTALL_LIBDIR的相对路径。这允许安装到CMAKE_INSTALL_BINDIR的可执行文件找到任何安装到CMAKE_INSTALL_LIBDIR的可能依赖的库。CMAKE_INSTALL_RPATH中的任何重复项都将被移除。在实践中,这两个值确保可执行文件和库能够找到它们的链接时依赖项,假设项目将它们安装到install(TARGETS)命令在没有明确提供目标时使用的默认位置。 要禁用集成开发环境的文件夹支持,请在调用qt_standard_project_setup之前或之后将USE_FOLDERS设置为OFF。 通过将QT_NO_STANDARD_PROJECT_SETUP变量设置为true,可以有效地禁用qt_standard_project_setup()命令。

重点来了:

  • 自Qt 6.7以来,可以使用I18N_TRANSLATED_LANGUAGES参数指定用于项目国际化的语言。参见QT_I18N_TRANSLATED_LANGUAGES了解详细信息。 使用I18N_SOURCE_LANGUAGE指定编写可翻译字符串所用的语言。缺省情况下,使用“en”。详细信息请参见QT_I18N_SOURCE_LANGUAGE。
qt_standard_project_setup(REQUIRES 6.5 I18N_TRANSLATED_LANGUAGES en en_AU fr)

解释:需要版本至少6.5(这里来自于QT官方的一个例子,我是用的版本是6.7),加载QT_I18N_SOURCE_LANGUAGE,需要翻译的.ts有en、en_AU、fr如果你想增加中文翻译,只需要在指定的目录加上zh_CN.ts,然后将命令修改为:

qt_standard_project_setup(REQUIRES 6.5 I18N_TRANSLATED_LANGUAGES en en_AU fr zh_CN)

系统将自动生成对应的.pm文件,然后根据用户所在环境自动的执行国际化。

不用向以前if else判断了,也不需要添加资源,不需要手动生成.qm文件

以下代码也不需要了:

  1. QTranslator translator;
  2. const QStringList uiLanguages = QLocale::system().uiLanguages();
  3. for (const QString &locale : uiLanguages) {
  4. const QString baseName = "untitled_" + QLocale(locale).name();
  5. if (translator.load(":/projct_/" + baseName)) {
  6. a.installTranslator(&translator);
  7. break;
  8. }
  9. }

一气呵成。

该条语句示例存在于官方项目:qml-i18n 中,有兴趣的小伙伴可以自行实践。

配合

  1. qt_add_translations(untitled
  2. RESOURCE_PREFIX /i18n
  3. TS_FILE_BASE untitled
  4. TS_FILE_DIR i18n
  5. )

生成前缀untitled_的.ts文件

QT6.7以前此命令只接受第一个参数作为“target”。“target”用于提取可翻译源和嵌入 .qm 文件。

QT6.7以后第一个参数“target”不再用于源提取。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/479602
推荐阅读
相关标签
  

闽ICP备14008679号