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

news2024/12/24 11:31:10

文章目录

  • 一、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 来处理文档中的字体问题。

在这里插入图片描述


二、文件下载

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.c

win32 {
    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 += core

TEMPLATE = lib
CONFIG += c++17 static

CONFIG(debug, debug|release){
    MOC_DIR = ../build-QGIS/fontconfig/Debug/moc
    RCC_DIR = ../build-QGIS/fontconfig/Debug/rcc
    UI_DIR = ../build-QGIS/fontconfig/Debug/ui
    OBJECTS_DIR = ../build-QGIS/fontconfig/Debug/obj
    DESTDIR = ../build-QGIS/fontconfig/Debug/obj
}else{
    MOC_DIR = ../build-QGIS/fontconfig/Release/moc
    RCC_DIR = ../build-QGIS/fontconfig/Release/rcc
    UI_DIR = ../build-QGIS/fontconfig/Release/ui
    OBJECTS_DIR = ../build-QGIS/fontconfig/Release/obj
    DESTDIR = ../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.c

win32 {
    SOURCES += ./win32/src/dirent.c
}

QMAKE_PRE_LINK += \
    mkdir -p $${PWD}/../QGIS/lib \
    mkdir -p $${PWD}/../QGIS/include \
    mkdir -p $${PWD}/../QGIS/include/fontconfig

win32 {
    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下编译,形成:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在VM虚拟机搭建NFS服务器

NFS共享要求如下: (1)共享“/mnt/自已姓名的完整汉语拼音”目录,允许XXX网段的计算机访问该共享目录,可进行读写操作。(说明:XXX网段,请根据你的规划,再具体指定&#xf…

2024美赛数学建模B题思路分析 - 搜索潜水器

# 1 赛题 问题B:搜索潜水器 总部位于希腊的小型海上巡航潜艇(MCMS)公司,制造能够将人类运送到海洋最深处的潜水器。潜水器被移动到该位置,并不受主船的束缚。MCMS现在希望用他们的潜水器带游客在爱奥尼亚海底探险&…

STM32F1 - 存储器映射

Memory mapping 1> 外设内存地址映射2> GPIO寄存器映射3> 存储器访问 1> 外设内存地址映射 1> STM32F103ZET6的地址线位宽为32位,所以寻址空间为4GB (2 ^ 32 4GB); 2> STM32将,Flash,SR…

数仓建模维度建模理论知识

0. 思维导图 第 1 章 数据仓库概述 1.1 数据仓库概述 数据仓库是一个为数据分析而设计的企业级数据管理系统。数据仓库可集中、整合多个信息源的大量数据,借助数据仓库的分析能力,企业可从数据中获得宝贵的信息进而改进决策。同时,随着时间的…

【经典项目】Java小游戏 —— 弹力球

一、功能需求 设计一个Java弹球小游戏的思路如下: 创建游戏窗口:使用Java图形库(如Swing或JavaFX)创建一个窗口,作为游戏的可视化界面。 绘制游戏界面:在游戏窗口中绘制游戏所需的各个元素,包括…

同城外卖跑腿app开发:重新定义城市生活

随着科技的发展和人们生活节奏的加快,同城外卖跑腿app应运而生,成为现代城市生活中的重要组成部分。本文将探讨同城外卖跑腿app开发的意义、市场需求、功能特点以及未来的发展趋势。 一、同城外卖跑腿app开发的意义 同城外卖跑腿app作为一种便捷的生活…

Visual Studio 2022 查看类关系图

这里写自定义目录标题 右键要查看的项目 -“查看”-“查看类图”效果展示: 原文地址 www.cnblogs.com 步骤1:勾选扩展开发 步骤2: 勾选类设计器 右键要查看的项目 -“查看”-“查看类图” 效果展示:

使用 WebSocket 发送二进制数据:最佳实践

WebSocket 技术提供了一种在客户端和服务器间建立持久连接的方法,使得双方可以在打开连接后随时发送数据,而不必担心建立复杂的持久连接机制。同时,使用二进制数据,如ArrayBuffer,可以更有效率地传送图像、声音等信息。…

MySQL知识点总结(四)——MVCC

MySQL知识点总结(四)——MVCC 三个隐式字段row_idtrx_idroll_pointer undo logread viewMVCC与隔离级别的关系快照读和当前读 MVCC全称是Multi Version Concurrency Control,也就是多版本并发控制。它的作用是提高事务的并发度,通…

西瓜书学习笔记——主成分分析(公式推导+举例应用)

文章目录 算法介绍实验分析 算法介绍 主成分分析(Principal Component Analysis,PCA)是一种常用的降维技术,用于在高维数据中发现最重要的特征或主成分。PCA的目标是通过线性变换将原始数据转换成一组新的特征,这些新…

web前端--------渐变和过渡

线性渐变,是指颜色沿一条直线进行渐变,例如从上到下、从左到右。 当然,CSS中也支持使用角度来设置渐变的方向,角度单位为deg。 0deg,为12点钟方向,表示从下到上渐变。 90deg,为3点钟方向&…

C++ | 部分和函数partial_sum的使用技巧

如果你需要处理一个数组的前缀和,或者数组中某一段元素的前缀和,你会怎么做呢? partial_sum函数是STL中的函数,用于计算范围的部分和,并从结果开始分配范围中的每个元素,range[first,last)中相应元素的部分…

nest.js实现登录验证码功能(学习笔记)

安装express-session npm i express-session 引入 注册session import * as session from express-session;import { NestFactory } from nestjs/core; import {DocumentBuilder,SwaggerModule, } from nestjs/swagger;import { AppModule } from ./app.module;async functio…

(五)springboot 配置多数据源连接mysql和hive

项目结构如下 mysql 执行如下建表语句,并插入一条测试数据 1 2 3 4 5 CREATE TABLE user ( id int(11) NOT NULL, name varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_ge…

计算机服务器中了DevicData勒索病毒如何解密,DevicData勒索病毒解密流程

网络数据安全一直是企业关心的主要话题,近期,云天数据恢复中心接到很多企业的求助,企业的计算机服务器遭到了DevicData勒索病毒攻击,导致企业计算机服务器瘫痪无法正常工作,严重影响了工作业务开展。经过云天数据恢复中…

【C语言】大小写字母的相互转化:多种方法解析及原理说明

在 C 语言编程中,我们经常需要进行大小写字母的相互转化。这种转化可以用于实现字符串的大小写转换、字符的大小写比较等操作。本篇博客将介绍多种方法来实现大小写字母的相互转化,并说明其原理和使用场景。 目录 方法一:标准库函数 方法二…

C# Onnx yolov8 水表读数检测

目录 效果 模型信息 项目 代码 训练数据 下载 C# Onnx yolov8 水表读数检测 效果 模型信息 Model Properties ------------------------- date:2024-01-31T10:18:10.141465 author:Ultralytics task:detect license:AGPL-…

在VMware Workstation上安装深度系统Deepin V23 Beta3

原文链接:在VMware上安装深度Deepin V23 Beta3 大家好!深度系统(Deepin)以其美观的界面和用户友好的设计而受到广泛欢迎。最近,深度系统的最新版本Deepin V23 Beta3已经发布。今天,我将为大家带来如何在VMw…

Vivado_2018.3文件 source无法自动更新,并且tb仿真文件不显示set as top,需要关闭Vivado之后重启

如下图所示,如果没有set as top这个选项,在确认代码没有问题的情况下,则需要重启vivado. 正常情况下如果有多个_tb仿真文件,会在simulation sources——sim_1下显示,_tb文件前面会有箭头 点开箭头之后,会发…

Matomo 访问图形显示异常

近期我们的把 PHP 系统完全升级后,访问 Matomo 的站点有关访问的曲线无法显示。 出现的情况如下图: 我们可以看到图片中有关的访问曲线无法显示。 如果具体直接访问链接的话,会有下面的错误信息。 问题和解决 出现上面问题的原因是缺少 ph…