使用qt读取系统字体库,并进行英文名称映射
映射函数:
// 创建中文字体到英文名称的映射表 QMap<QString, QString> createFontMapping() { QMap<QString, QString> mapping; mapping[QString::fromLocal8Bit("宋体")] = "simsun.ttc"; mapping[QString::fromLocal8Bit("黑体")] = "simhei.ttf"; mapping[QString::fromLocal8Bit("微软雅黑")] = "msyh.ttc"; mapping[QString::fromLocal8Bit("微软雅黑粗体")] = "msyhbd.ttc"; mapping[QString::fromLocal8Bit("微软雅黑细体")] = "msyhl.ttc"; mapping[QString::fromLocal8Bit("微软正黑体")] = "msyhbd.ttc"; mapping[QString::fromLocal8Bit("楷体")] = "simkai.ttf"; mapping[QString::fromLocal8Bit("新宋体")] = "simsun.ttc"; mapping[QString::fromLocal8Bit("仿宋")] = "simfang.ttf"; mapping[QString::fromLocal8Bit("幼圆")] = "SIMYOU.TTF"; mapping[QString::fromLocal8Bit("隶书")] = "SIMLI.TTF"; mapping[QString::fromLocal8Bit("华文细黑")] = "STXIHEI.TTF"; mapping[QString::fromLocal8Bit("华文楷体")] = "STKAITI.TTF"; mapping[QString::fromLocal8Bit("华文宋体")] = "STSONG.TTF"; mapping[QString::fromLocal8Bit("华文仿宋")] = "STFANGSO.TTF"; mapping[QString::fromLocal8Bit("华文中宋")] = "STZHONGS.TTF"; mapping[QString::fromLocal8Bit("华文彩云")] = "STCAIYUN.TTF"; mapping[QString::fromLocal8Bit("华文琥珀")] = "STHUPO.TTF"; mapping[QString::fromLocal8Bit("华文新魏")] = "STXINWEI.TTF"; mapping[QString::fromLocal8Bit("华文隶书")] = "STLITI.TTF"; mapping[QString::fromLocal8Bit("华文行楷")] = "STXINGKA.TTF"; mapping[QString::fromLocal8Bit("方正舒体")] = "FZSTK.TTF"; mapping[QString::fromLocal8Bit("方正姚体")] = "FZYTK.TTF"; mapping[QString::fromLocal8Bit("思源黑体")] = "Source Han Sans CN.ttf"; mapping[QString::fromLocal8Bit("思源宋体")] = "Source Han Serif SC.ttf"; mapping[QString::fromLocal8Bit("文泉驿微米黑")] = "WenQuanYi Micro Hei.ttf"; mapping[QString::fromLocal8Bit("苹方")] = "PingFang SC.ttf"; mapping[QString::fromLocal8Bit("华文黑体")] = "STHeiti.ttf"; // 注意:其他“华文”字体如“华文楷体”等已定义,不再重复 mapping[QString::fromLocal8Bit("冬青黑体简")] = "Hiragino Sans GB.ttf"; mapping[QString::fromLocal8Bit("兰亭黑-简")] = "Lantinghei SC.ttf"; mapping[QString::fromLocal8Bit("翩翩体-简")] = "Hanzipen SC.ttf"; mapping[QString::fromLocal8Bit("手札体-简")] = "Hannotate SC.ttf"; mapping[QString::fromLocal8Bit("宋体-简")] = "Songti SC.ttf"; mapping[QString::fromLocal8Bit("娃娃体-简")] = "Wawati SC.ttf"; mapping[QString::fromLocal8Bit("魏碑-简")] = "Weibei SC.ttf"; mapping[QString::fromLocal8Bit("行楷-简")] = "Xingkai SC.ttf"; mapping[QString::fromLocal8Bit("雅痞-简")] = "Yapi SC.ttf"; mapping[QString::fromLocal8Bit("圆体-简")] = "Yuanti SC.ttf"; mapping[QString::fromLocal8Bit("汉仪旗黑")] = "HYQihei.ttf"; // 注意:有多个粗细,但家族名一致 mapping[QString::fromLocal8Bit("汉仪大宋简")] = "HYDaSongJ.ttf"; mapping[QString::fromLocal8Bit("汉仪楷体")] = "HYKaiti.ttf"; mapping[QString::fromLocal8Bit("汉仪家书简")] = "HYJiaShuJ.ttf"; mapping[QString::fromLocal8Bit("汉仪PP体简")] = "HYPPTiJ.ttf"; mapping[QString::fromLocal8Bit("汉仪乐喵体简")] = "HYLeMiaoTi.ttf"; mapping[QString::fromLocal8Bit("汉仪小麦体")] = "HYXiaoMaiTiJ.ttf"; mapping[QString::fromLocal8Bit("汉仪程行体")] = "HYChengXingJ.ttf"; mapping[QString::fromLocal8Bit("汉仪黑荔枝")] = "HYHeiLiZhiTiJ.ttf"; mapping[QString::fromLocal8Bit("汉仪雅酷黑W")] = "HYYaKuHeiW.ttf"; mapping[QString::fromLocal8Bit("汉仪大黑简")] = "HYDaHeiJ.ttf"; mapping[QString::fromLocal8Bit("汉仪尚魏手书")] = "HYShangWeiShouShuW.ttf"; // 补齐常见 Windows 中文字体映射 mapping[QString::fromLocal8Bit("新细明体")] = "PMingLiU.ttf"; mapping[QString::fromLocal8Bit("细明体")] = "MingLiU.ttf"; mapping[QString::fromLocal8Bit("标楷体")] = "DFKai-SB.ttf"; mapping[QString::fromLocal8Bit("Arial Unicode MS")] = "Arial Unicode MS.ttf"; mapping[QString::fromLocal8Bit("Times New Roman")] = "Times New Roman.ttf"; mapping[QString::fromLocal8Bit("Courier New")] = "Courier New.ttf"; mapping[QString::fromLocal8Bit("Tahoma")] = "Tahoma.ttf"; mapping[QString::fromLocal8Bit("Verdana")] = "Verdana.ttf"; mapping[QString::fromLocal8Bit("Georgia")] = "Georgia.ttf"; mapping[QString::fromLocal8Bit("Trebuchet MS")] = "Trebuchet MS.ttf"; mapping[QString::fromLocal8Bit("Impact")] = "Impact.ttf"; mapping[QString::fromLocal8Bit("Comic Sans MS")] = "Comic Sans MS.ttf"; mapping[QString::fromLocal8Bit("Lucida Console")] = "Lucida Console.ttf"; mapping[QString::fromLocal8Bit("Lucida Sans Unicode")] = "Lucida Sans Unicode.ttf"; // 常见补充中文字体 mapping[QString::fromLocal8Bit("方正兰亭黑")] = "FZLanTingHei.ttf"; mapping[QString::fromLocal8Bit("方正报宋")] = "FZBaoSong.ttf"; mapping[QString::fromLocal8Bit("方正姚体")] = "FZYaoti.ttf"; mapping[QString::fromLocal8Bit("方正舒体")] = "FZShuTi.ttf"; mapping[QString::fromLocal8Bit("方正仿宋")] = "FZFangSong.ttf"; mapping[QString::fromLocal8Bit("方正楷体")] = "FZKaiTi.ttf"; mapping[QString::fromLocal8Bit("方正书宋")] = "FZShuSong.ttf"; // 其他开源或常用字体 mapping[QString::fromLocal8Bit("霞鹜文楷")] = "LXGW WenKai.ttf"; mapping[QString::fromLocal8Bit("霞鹜文楷屏显")] = "LXGW WenKai Screen.ttf"; mapping[QString::fromLocal8Bit("快乐体")] = "Kuaile.ttf"; mapping[QString::fromLocal8Bit("得意黑")] = "Smiley Sans.ttf"; mapping[QString::fromLocal8Bit("得意黑体")] = "Smiley Sans.ttf"; // Adobe 字体系列 mapping[QString::fromLocal8Bit("Adobe 黑体-Std")] = "Adobe Heiti Std.ttf"; mapping[QString::fromLocal8Bit("Adobe 宋体-Std")] = "Adobe SongStd.ttf"; mapping[QString::fromLocal8Bit("Adobe 楷体-Std")] = "Adobe Kaiti Std.ttf"; mapping[QString::fromLocal8Bit("Adobe 仿宋-Std")] = "Adobe Fangsong Std.ttf"; // 补充 macOS / 跨平台但可能存在于 Windows 的字体 mapping[QString::fromLocal8Bit("SF Pro Text")] = "SF Pro Text.ttf"; mapping[QString::fromLocal8Bit("SF Pro Display")] = "SF Pro Display.ttf"; mapping[QString::fromLocal8Bit("Noto Sans CJK SC")] = "Noto Sans CJK SC.ttf"; // 思源黑体另一种名称 mapping[QString::fromLocal8Bit("Noto Serif CJK SC")] = "Noto Serif CJK SC.ttf"; // 思源宋体另一种名称 // 特殊用途字体 mapping[QString::fromLocal8Bit("Symbol")] = "Symbol.ttf"; mapping[QString::fromLocal8Bit("Webdings")] = "Webdings.ttf"; mapping[QString::fromLocal8Bit("Wingdings")] = "Wingdings.ttf"; mapping[QString::fromLocal8Bit("MS Gothic")] = "MS Gothic.ttf"; mapping[QString::fromLocal8Bit("Gulim")] = "Gulim.ttf"; // 韩文 mapping[QString::fromLocal8Bit("MS Mincho")] = "MS Mincho.ttf"; // 日文明体 // 补充“等线”系列(Windows 内置无衬线中文字体) mapping[QString::fromLocal8Bit("等线")] = "Deng.ttf"; mapping[QString::fromLocal8Bit("等线 细体")] = "Dengl.ttf"; mapping[QString::fromLocal8Bit("等线 粗体")] = "Dengb.ttf"; mapping[QString::fromLocal8Bit("等线 Light")] = "Dengl.ttf"; // 补充“微软雅黑”变体 mapping[QString::fromLocal8Bit("微软雅黑 Light")] = "Microsoft YaHei Light.ttf"; mapping[QString::fromLocal8Bit("微软雅黑 Bold")] = "Microsoft YaHei Bold.ttf"; mapping[QString::fromLocal8Bit("微软雅黑 UI")] = "Microsoft YaHei UI.ttf"; // 补充“苹方”不同字重(若已安装) mapping[QString::fromLocal8Bit("苹方-极细体")] = "PingFang SC.ttf"; mapping[QString::fromLocal8Bit("苹方-细体")] = "PingFang SC.ttf"; mapping[QString::fromLocal8Bit("苹方-中等体")] = "PingFang SC.ttf"; mapping[QString::fromLocal8Bit("苹方-常规体")] = "PingFang SC.ttf"; mapping[QString::fromLocal8Bit("苹方-中粗体")] = "PingFang SC.ttf"; mapping[QString::fromLocal8Bit("苹方-纤细体")] = "PingFang SC.ttf"; // 补充其他汉仪字体(常见) mapping[QString::fromLocal8Bit("汉仪中宋简")] = "HYZhongSongJ.ttf"; mapping[QString::fromLocal8Bit("汉仪长仿宋")] = "HYZhangFangSongJ.ttf"; mapping[QString::fromLocal8Bit("汉仪细行楷")] = "HYXingKaiTiJ.ttf"; mapping[QString::fromLocal8Bit("汉仪雪君体")] = "HXueJunTiJ.ttf"; // 补充方正字体 mapping[QString::fromLocal8Bit("方正静蕾体")] = "FZJingLei.ttf"; mapping[QString::fromLocal8Bit("方正胖娃体")] = "FZPangWa.ttf"; mapping[QString::fromLocal8Bit("方正北魏楷书")] = "FZBeiWeiKai.ttf"; mapping[QString::fromLocal8Bit("方正剪纸")] = "FZJianZhi.ttf"; return mapping; } // 使用示例 QString getEnglishFontName(const QString& chineseName) { static QMap<QString, QString> mapping = createFontMapping(); return mapping.value(chineseName, chineseName); // 找不到则返回原名 }
调用:
#include <QFontComboBox> connect(ui.fontComboBox, &QFontComboBox::currentFontChanged, this, &CVRTextSymbolDialog::_slotFontChanged); void _slotFontChanged(const QFont font) { string strFont = getEnglishFontName(font.family()).toLocal8Bit() ; }
这个的 strFont 就是英文映射的字体库名称,可以在程序其他地方调用

浙公网安备 33010602011771号