HarmonyOS鸿蒙Next中Qt如何使用ttf字体库,PC项目,有demo?
HarmonyOS鸿蒙Next中Qt如何使用ttf字体库,PC项目,有demo?
功能描述
Qt中ttf字体库怎么加载?自己下载的字体库如何使用?有demo么?
版本信息
PC
开发者您好,
【解决方案】
可以参考QtFontSwitcher使用示例,字体通过QFontDatabase类的addApplicationFont加载,使用QFontDialog字体选择对话框或QComboBox下拉框进行选择,并利用QFont类实现字体切换。
创建工程可以参考:从0到1构建HarmonyOS PC Qt项目。
- 使用模板工程后,创建窗口布局:创建"字体对话框"按钮,连接信号在点击时调用自定义的SelectFont函数。
- 点击"字体对话框"按钮实现选择字体,调用QFontDialog类的getFont函数
- 添加字体文件:调用writableLocation将指定类型文件写入目录,对应沙箱路径为/data/storage/el2/base/files,并创建fonts目录用于添加字体文件。调用addApplicationFont从指定文件中加载字体,调用applicationFontFamilies获取字体族列表。
- 加载字体:QFontDatabase类提供基础窗口系统中可用字体的信息,通过families查询数据库中所有可用字体族的列表,调用addItems将排序后的字体列表添加到下拉框。
- 应用字体:调用setFont将字体应用到文本编辑框,并通过family和pointSize分别显示字体名称和大小。
说明(下述D:\\qtBusiness\\installDir,D:\\arkTSProject\\QtSdkOpen\\ohos17_arm64-v8a_release根据实际情况调整):
在非开源Qt中实现修改字体功能。
- 将本地Qt安装路径
\plugins\platforms目录下的libqohos.so与plugins路径下的styles文件夹放入libs\arm64-v8a路径。 - 安装路径配置到
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中实现修改字体功能。
- 将
libs\arm64-v8a下的libplugins_platforms_qopenharmony.so文件替换为本地Qt安装路径\plugins\platforms目录下的libplugins_platforms_qopenharmony.so。 - 将开源版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字体加载示例进行移植。
关键步骤概括:
- 获取TTF字体文件。
- 将其添加到项目资源或确定可访问的存储位置。
- 在代码中使用
QFontDatabase::addApplicationFont加载。 - 通过返回的字体系列名创建
QFont并设置给需要的控件。
请根据您的具体项目结构选择加载方式,并注意测试在HarmonyOS Next PC环境下的实际文件访问和渲染效果。

