HarmonyOS鸿蒙Next中Qt如何使用ttf字体库,PC项目,有demo?

HarmonyOS鸿蒙Next中Qt如何使用ttf字体库,PC项目,有demo?

功能描述

Qt中ttf字体库怎么加载?自己下载的字体库如何使用?有demo么?

版本信息

PC

3 回复

开发者您好,

【解决方案】

可以参考QtFontSwitcher使用示例,字体通过QFontDatabase类的addApplicationFont加载,使用QFontDialog字体选择对话框或QComboBox下拉框进行选择,并利用QFont类实现字体切换。

创建工程可以参考:从0到1构建HarmonyOS PC Qt项目

以下连接来源doc.qt.io

  1. 使用模板工程后,创建窗口布局:创建"字体对话框"按钮,连接信号在点击时调用自定义的SelectFont函数。
  2. 点击"字体对话框"按钮实现选择字体,调用QFontDialog类的getFont函数
  3. 添加字体文件:调用writableLocation将指定类型文件写入目录,对应沙箱路径为/data/storage/el2/base/files,并创建fonts目录用于添加字体文件。调用addApplicationFont从指定文件中加载字体,调用applicationFontFamilies获取字体族列表。
  4. 加载字体:QFontDatabase类提供基础窗口系统中可用字体的信息,通过families查询数据库中所有可用字体族的列表,调用addItems将排序后的字体列表添加到下拉框。
  5. 应用字体:调用setFont将字体应用到文本编辑框,并通过familypointSize分别显示字体名称和大小。

说明(下述D:\\qtBusiness\\installDir,D:\\arkTSProject\\QtSdkOpen\\ohos17_arm64-v8a_release根据实际情况调整):

在非开源Qt中实现修改字体功能。

  1. 将本地Qt安装路径\plugins\platforms目录下的libqohos.soplugins路径下的styles文件夹放入libs\arm64-v8a路径。
  2. 安装路径配置到QT_PREFIX中,可以选择下面两个方案中的一个:
    • 修改entry\src\main\cpp\CMakeLists.txt文件,将QT_PREFIX变量的值从"D:\\qtBusiness\\installDir"更新为本地Qt编译输出目录路径:
      # 检查环境变量是否存在
      if(DEFINED ENV{WORKSPACE})
         set(QT_PREFIX $ENV{WORKSPACE}/code/SDK/Qt/QtOpenSDK)
         message(STATUS "get QT_PREFIX PATH: ${QT_PREFIX}")
      else()
         set(QT_PREFIX "D:\\qtBusiness\\installDir")
         message(STATUS "WORKSPACE not defined, using default path: ${QT_PREFIX}")
      endif()
      
    • 或者删除entry\src\main\cpp\CMakeLists.txt中的QT_PREFIX定义,在entry\build-profile.json5中设置QT_PREFIX
      "buildOption": {
         "externalNativeOptions": {
            "path": "./src/main/cpp/CMakeLists.txt",
            "arguments": "-DQT_PREFIX=D:\\qtBusiness\\installDir",
            "cppFlags": "",
            "abiFilters": ["arm64-v8a"]
         }
      },
      

在开源版Qt中实现修改字体功能。

  1. libs\arm64-v8a下的libplugins_platforms_qopenharmony.so文件替换为本地Qt安装路径\plugins\platforms目录下的libplugins_platforms_qopenharmony.so
  2. 将开源版Qt安装路径配置到QT_PREFIX中,可以选择下面两个方案中的一个
    • 修改entry\src\main\cpp\CMakeLists.txt文件,将QT_PREFIX变量的值从"D:\\arkTSProject\\QtSdkOpen\\ohos17_arm64-v8a_release"更新为本地Qt编译输出目录路径
      # 检查环境变量是否存在
      if(DEFINED ENV{WORKSPACE})
         set(QT_PREFIX $ENV{WORKSPACE}/code/SDK/Qt/QtOpenSDK)
         message(STATUS "get QT_PREFIX PATH: ${QT_PREFIX}")
      else()
         set(QT_PREFIX "D:\\arkTSProject\\QtSdkOpen\\ohos17_arm64-v8a_release")
         message(STATUS "WORKSPACE not defined, using default path: ${QT_PREFIX}")
      endif()
      
    • 或者删除entry\src\main\cpp\CMakeLists.txt中的QT_PREFIX定义,在entry\build-profile.json5中设置QT_PREFIX
      "buildOption": {
         "externalNativeOptions": {
            "path": "./src/main/cpp/CMakeLists.txt",
            "arguments": "-DQT_PREFIX=D:\\arkTSProject\\QtSdkOpen\\ohos17_arm64-v8a_release",
            "cppFlags": "",
            "abiFilters": ["arm64-v8a"]
         }
      },
      

更多关于HarmonyOS鸿蒙Next中Qt如何使用ttf字体库,PC项目,有demo?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,Qt项目使用TTF字体库,可通过Qt的QFontDatabase类加载字体文件。将TTF文件放入项目资源目录,使用QFontDatabase::addApplicationFont()加载字体路径,成功后返回字体ID。然后使用QFont设置字体族名。目前官方未提供专门Demo,但标准Qt字体加载方法在鸿蒙Next上适用。

在HarmonyOS Next的PC环境中,Qt应用使用TTF字体库的核心方法与标准Qt开发基本一致,主要涉及字体的加载与注册。

1. 加载与使用TTF字体库

您可以通过以下两种主要方式实现:

  • 方式一:动态加载(适用于特定字体文件) 在应用程序初始化时(如main函数或主窗口构造函数中),使用QFontDatabase来添加字体文件。添加成功后,即可像使用系统字体一样通过字体系列名(family name)来使用它。

    #include <QFontDatabase>
    ...
    int fontId = QFontDatabase::addApplicationFont(":/fonts/YourFont.ttf"); // 使用资源文件路径,或绝对文件路径
    if (fontId != -1) {
        QStringList fontFamilies = QFontDatabase::applicationFontFamilies(fontId);
        if (!fontFamilies.isEmpty()) {
            QString family = fontFamilies.at(0);
            QFont font(family, 12); // 创建该字体的QFont对象
            // ui->label->setFont(font); // 应用于控件
        }
    }
    
  • 方式二:打包为资源(便于分发) 将TTF文件添加到Qt项目的资源文件(.qrc)中,然后使用上述addApplicationFont方法时,通过":/..."的资源路径进行引用。这是确保字体文件与应用程序一起打包的常用方式。

2. HarmonyOS Next PC环境的注意事项

  • 路径权限:如果使用绝对路径(非资源路径),请确保应用具有读取该路径下文件的权限。HarmonyOS Next的应用沙箱机制可能对文件访问有特定要求,建议优先使用资源文件方式或将字体放置在应用可访问的目录(如应用自身的数据目录)。
  • 字体渲染:Qt会利用底层的平台字体渲染引擎。在HarmonyOS Next PC上,应确保Qt框架已正确适配系统图形和字体服务,以获得一致的渲染效果。

3. Demo参考

由于HarmonyOS Next的PC Qt开发环境仍在完善中,目前没有官方的特定Demo。您可以直接参考标准的Qt字体加载示例进行移植。

关键步骤概括:

  1. 获取TTF字体文件。
  2. 将其添加到项目资源或确定可访问的存储位置。
  3. 在代码中使用QFontDatabase::addApplicationFont加载。
  4. 通过返回的字体系列名创建QFont并设置给需要的控件。

请根据您的具体项目结构选择加载方式,并注意测试在HarmonyOS Next PC环境下的实际文件访问和渲染效果。

回到顶部