【QT+QGIS跨平台编译】之二十二:【FontConfig+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录

  • 一、FontConfig介绍
  • 二、文件下载
  • 三、文件分析
  • 四、pro文件
  • 五、编译实践

一、FontConfig介绍

FontConfig 是一个用于配置和定制字体的库,广泛应用于基于X Window系统的操作系统中,尤其是在Linux和Unix-like系统中。它为应用程序提供了一种统一的方式来发现和配置可用的字体,不仅可以管理系统字体,还能处理用户自定义字体。FontConfig 通过XML配置文件来控制字体的别名、字体目录的路径以及各种字体属性的匹配规则。

主要特性

字体发现:FontConfig 允许应用程序查询系统中可用的字体,并根据字体的属性(如名称、风格、大小等)选择合适的字体。

字体配置:通过编辑配置文件,用户和开发者可以定义字体别名、添加或排除字体目录,以及设置全局或特定于应用程序的字体偏好。

字体替换和匹配:FontConfig 提供了强大的字体替换和匹配机制,可以根据配置规则自动选择最匹配的字体,这对于处理缺少某些字符的字体时非常有用。

字符集覆盖:它可以检查字体是否支持特定的字符集,这对于多语言环境下的应用程序尤其重要。

缓存机制:FontConfig 使用缓存来加快字体查询过程,提高应用程序的启动速度。

配置文件
FontConfig 的配置主要通过 /etc/fonts/fonts.conf 及用户目录下的配置文件进行。这些XML格式的配置文件定义了字体的搜索路径、别名、匹配规则等。用户可以根据需要修改这些文件来调整系统的字体设置。

使用场景
桌面环境和窗口管理器:如GNOME、KDE等,使用FontConfig 来管理和配置字体。
图形用户界面库:如GTK+和Qt,通过FontConfig 来实现字体的选择和匹配。
文档查看和编辑软件:如LibreOffice、GIMP等,依赖FontConfig 来处理文档中的字体问题。

在这里插入图片描述
【FontConfi跨平台编译】:Windows环境下编译成果(支撑QGIS跨平台编译,以及二次研发)
【FontConfig跨平台编译】:Linux环境下编译成果(支撑QGIS跨平台编译,以及二次研发)
【FontConfig跨平台编译】:MacOS环境下编译成果(支撑QGIS跨平台编译,以及二次研发)
【FontConfig跨平台编译】:源码及跨平台编译工程(支撑QGIS跨平台编译,以及二次研发)


二、文件下载

FontConfig网站:

FontConfig Download

在这里插入图片描述

获取fontconfig-master.zip文件。


三、文件分析

解压缩fontconfig-master.zip文件。

进入fontconfig-master/src目录

在这里插入图片描述

Makefile.am记录文件信息、依赖库信息。

文件信息:

在这里插入图片描述

依赖库信息:

在这里插入图片描述


四、pro文件

配置头文件:

#头文件
HEADERS +=  ./src/fcarch.h \./src/fcatomic.h \./src/fcmutex.h \./src/fcobjs.h \./src/fcobjshash.h \./src/fcwindows.h \./src/ftglue.h

配置源文件:

#源文件
SOURCES +=  ./src/fcatomic.c \./src/fcblanks.c \./src/fccache.c \./src/fccfg.c \./src/fccharset.c \./src/fccompat.c \./src/fcdbg.c \./src/fcdefault.c \./src/fcdir.c \./src/fcformat.c \./src/fcfreetype.c \./src/fcfs.c \./src/fchash.c \./src/fcinit.c \./src/fclang.c \./src/fclist.c \./src/fcmatch.c \./src/fcmatrix.c \./src/fcname.c \./src/fcobjs.c \./src/fcpat.c \./src/fcrange.c \./src/fcserialize.c \./src/fcstat.c \./src/fcstr.c \./src/fcweight.c \./src/fcxml.c \./src/ftglue.cwin32 {SOURCES += ./win32/src/dirent.c
}

配置预定义项:

DEFINES -= UNICODE _UNICODE
DEFINES += HAVE_CONFIG_H HAVE_XMLPARSE_H ENABLE_LIBXML2
win32 {DEFINES += _CRT_SECURE_NO_DEPRECATE _CRT_NONSTDC_NO_DEPRECATE
}

配置依赖库:

#LIBS
LIBS += -L../QGIS/lib
CONFIG(debug, debug|release){LIBS += -lfreetyped -lxml2d
}else{LIBS += -lfreetype -lxml2
}

形成021.fontconfig-5.1.0.pro 文件:

QT += coreTEMPLATE = lib
CONFIG += c++17 staticCONFIG(debug, debug|release){MOC_DIR = ../build-QGIS/fontconfig/Debug/mocRCC_DIR = ../build-QGIS/fontconfig/Debug/rccUI_DIR = ../build-QGIS/fontconfig/Debug/uiOBJECTS_DIR = ../build-QGIS/fontconfig/Debug/objDESTDIR = ../build-QGIS/fontconfig/Debug/obj
}else{MOC_DIR = ../build-QGIS/fontconfig/Release/mocRCC_DIR = ../build-QGIS/fontconfig/Release/rccUI_DIR = ../build-QGIS/fontconfig/Release/uiOBJECTS_DIR = ../build-QGIS/fontconfig/Release/objDESTDIR = ../build-QGIS/fontconfig/Release/obj
}CONFIG(debug, debug|release){TARGET = fontconfigd
}else{TARGET = fontconfig
}
DEFINES -= UNICODE _UNICODE
DEFINES += HAVE_CONFIG_H HAVE_XMLPARSE_H ENABLE_LIBXML2
win32 {DEFINES += _CRT_SECURE_NO_DEPRECATE _CRT_NONSTDC_NO_DEPRECATE
}# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0#当前目录
INCLUDEPATH += ./ ./src ./win32 ./win32/include ./win32/src
#freetype libxml2 iconv
INCLUDEPATH += ../QGIS/include ../QGIS/include/freetype2
INCLUDEPATH += ../QGIS/include/libxml2
#LIBS
LIBS += -L../QGIS/lib
CONFIG(debug, debug|release){LIBS += -lfreetyped -lxml2d
}else{LIBS += -lfreetype -lxml2
}#头文件
HEADERS +=  ./src/fcarch.h \./src/fcatomic.h \./src/fcmutex.h \./src/fcobjs.h \./src/fcobjshash.h \./src/fcwindows.h \./src/ftglue.h#源文件
SOURCES +=  ./src/fcatomic.c \./src/fcblanks.c \./src/fccache.c \./src/fccfg.c \./src/fccharset.c \./src/fccompat.c \./src/fcdbg.c \./src/fcdefault.c \./src/fcdir.c \./src/fcformat.c \./src/fcfreetype.c \./src/fcfs.c \./src/fchash.c \./src/fcinit.c \./src/fclang.c \./src/fclist.c \./src/fcmatch.c \./src/fcmatrix.c \./src/fcname.c \./src/fcobjs.c \./src/fcpat.c \./src/fcrange.c \./src/fcserialize.c \./src/fcstat.c \./src/fcstr.c \./src/fcweight.c \./src/fcxml.c \./src/ftglue.cwin32 {SOURCES += ./win32/src/dirent.c
}QMAKE_PRE_LINK += \mkdir -p $${PWD}/../QGIS/lib \mkdir -p $${PWD}/../QGIS/include \mkdir -p $${PWD}/../QGIS/include/fontconfigwin32 {QMAKE_POST_LINK += cp $${DESTDIR}/*.lib $${PWD}/../QGIS/lib/CONFIG(debug, debug|release){QMAKE_POST_LINK += && \cp $${DESTDIR}/*.pdb $${PWD}/../QGIS/lib/}
}
linux* {QMAKE_POST_LINK += cp $${DESTDIR}/*.a $${PWD}/../QGIS/lib/
}
macx {QMAKE_POST_LINK += cp $${DESTDIR}/*.a $${PWD}/../QGIS/lib/
}QMAKE_POST_LINK += && \cp $${PWD}/fontconfig/*.h $${PWD}/../QGIS/include/fontconfig/# Default rules for deployment.
#unix {
#    target.path = /usr/lib
#}
#!isEmpty(target.path): INSTALLS += target

五、编译实践

用QtCreator程序打开021.fontconfig-5.1.0.pro文件:
在这里插入图片描述

在windows下编译,形成:
在这里插入图片描述

在linux下编译,形成:
在这里插入图片描述

在macos下编译,形成:
在这里插入图片描述

【FontConfi跨平台编译】:Windows环境下编译成果(支撑QGIS跨平台编译,以及二次研发)
【FontConfig跨平台编译】:Linux环境下编译成果(支撑QGIS跨平台编译,以及二次研发)
【FontConfig跨平台编译】:MacOS环境下编译成果(支撑QGIS跨平台编译,以及二次研发)
【FontConfig跨平台编译】:源码及跨平台编译工程(支撑QGIS跨平台编译,以及二次研发)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/450358.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

车载测试Vector工具——基于DoIP的ECU/车辆的连接故障排除

车载测试Vector工具——基于DoIP的ECU/车辆的连接故障排除 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和…

【周总结】Programmer‘s weekend routine---First week of February

总结 工作: 参加项目重构方案讨论会议、个人任务计划分期以及工期安排、项目初步重构开发 日常:参加年会(阳光普照奖都莫得) 2024.2.3 阴 不冷 连着一周的雨,我那袜子挂两三天了还能挤出水。。离谱、莆…

MySQL全表扫描:性能杀手的隐患与优化策略

MySQL全表扫描:性能杀手的隐患与优化策略 MySQL数据库作为常用的关系型数据库管理系统之一,全表扫描问题一直困扰着开发者。本文将深入剖析MySQL全表扫描的原理、其对性能的严重影响,同时提供一系列优化策略,助您高效应对MySQL性能…

2.3作业

一.选择题 1、适宜采用inline定义函数情况是(C) A. 函数体含有循环语句 B. 函数体含有递归语句 C. 函数代码少、频繁调用 D. 函数代码多、不常调用 2、假定一个函数为A(int i4, int j0) {;}, 则执行“A (1);”语句后,i和j的值分别…

TQ15EG开发板教程:开发板资源介绍

时钟资源 采用时钟芯片CDCM6208提供系统时钟 PL端时钟 PS 收发器时钟 PL收发器时钟 电源 BANK500 BANK501 BANK502 BANK503(专用) 1.8V 1.8V 1.8V 1.8V PS端外设 QSPI 采用2片MT25QU256 拼接成8bit的QSPI存储系统。采用1.8V供电 SD卡 SATA接口 PS端以太网接口 D…

字符数组的学习

前言: 在前面我们介绍过字符型数据是以字符的ASCII码储存在存储单元中,一般占一个字节,由于 ASCII码也属于整数类型,因此在C99标准中把字符类型归纳为整数类型中的一种,由于字符数据 的应用比较广泛,尤其…

演讲回顾:如何为大规模研发团队加速CI构建,实现高效流水线

近日,龙智联合Atlassian举办的DevSecOps研讨会年终专场”趋势展望与实战探讨:如何打好DevOps基础、赋能创新”在上海圆满落幕。龙智Atlassian技术与顾问咨询团队,以及清晖、JamaSoftware、CloudBees等生态伙伴的嘉宾发表了主题演讲&#xff0…

【高阶数据结构】红黑树

文章目录 前言什么是红黑树红黑树的性质红黑树结点的定义红黑树的插入情况一情况二情况三插入代码总结 验证是否为红黑树红黑树的删除 前言 前面我们学习了 AVL 树——高度平衡的二叉搜索树,AVL 树保证了结点的左右子树的高度差的绝对值不超过 1,也就是…

bash脚本学习笔记

一、扫盲 脚本文件是一种文本文件,其中包含了一系列的命令和指令,可以被操作系统解释器直接解释执行。脚本文件通常被用来完成特定的任务或执行重复性的操作。 脚本文件通常以某种编程语言的语法编写,例如 Bash、Python、Perl、Ruby 等等。…

png,jpg,bmp等格式图像转.npy文件(附代码)

目录 一、npy文件二、代码三、转后效果 一、npy文件 .npy 文件是 NumPy 库用于存储数组的二进制文件格式。这种文件可以存储一个或多个 NumPy 数组对象。.npy 文件在保存和加载 NumPy 数组时非常有用,因为它们可以用于在磁盘上高效地存储数据,并且在加载…

IEC104 S帧超时判定客户与服务端不匹配造成的异常链接问题分析

2、通过ss命令发现确有链接端口变化,与设备约一天一次的重连,通过抓包(tcpdump -vvv -nn port 1001 -w 0926.cap)分析得以下现象 2.1、异常情况时未对设备的I帧均匀的回S帧进行确认,正常情况时均匀的回S帧进行确认 2.…

QT播放gstreamer命令(三)---使用QMediaPlayer

前文: 因为之前听说过,QMediaPlayer已经集成了gstreamer,但是并没有什么接口来例子来说明,根本看不出来有任何gstreamer的形式,于是在QT5助手里面搜了一下,发现确实有gstreamer的痕迹,但是例子写…