You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gentoo KDE环境下QFontDialog显示不支持区域字体,如何排除?

解决QFontDialog中排除不支持区域字体的问题

方法一:通过fontconfig系统级过滤

直接配置fontconfig屏蔽特定字体或按语言区域筛选,整个系统的字体列表都会生效,QFontDialog自然不会显示不支持的字体:

  1. 创建或编辑/etc/fonts/local.conf,添加以下规则:
    <?xml version="1.0"?>
    <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
    <fontconfig>
      <!-- 直接排除Noto Rashi Hebrew字体 -->
      <selectfont>
        <rejectfont>
          <pattern>
            <patelt name="family">
              <string>Noto Rashi Hebrew</string>
            </patelt>
          </pattern>
        </rejectfont>
      </selectfont>
    
      <!-- 可选:只保留支持英文、俄文的字体 -->
      <match>
        <test name="lang" compare="not_eq">
          <string>en</string>
          <string>ru</string>
        </test>
        <edit name="family" mode="assign">
          <string>sans-serif</string>
        </edit>
      </match>
    </fontconfig>
    
  2. 执行命令刷新fontconfig缓存:
    fc-cache -fv
    

方法二:Qt应用代码层面过滤

如果不想修改系统配置,可在代码里自定义QFontDialog的字体列表,但注意原生对话框无法直接修改,需要禁用原生对话框:

QFontDialog dialog;
QFontDatabase db;
QStringList allFamilies = db.families();
QStringList filteredFamilies;

// 筛选支持英文(Latin)或俄文(Cyrillic)的字体
for (const QString &family : allFamilies) {
    auto writingSystems = db.writingSystems(family);
    if (writingSystems.contains(QFontDatabase::Latin) || writingSystems.contains(QFontDatabase::Cyrillic)) {
        filteredFamilies.append(family);
    }
}

// 禁用原生对话框,设置过滤后的字体列表
dialog.setOption(QFontDialog::NoNativeDialog);
dialog.setFamilies(filteredFamilies);

if (dialog.exec() == QDialog::Accepted) {
    QFont selectedFont = dialog.selectedFont();
    // 后续处理选中的字体
}

方法三:卸载不需要的字体包

在Gentoo里直接移除包含该字体的包:

  1. 查找字体所属的包:
    equery b /usr/share/fonts/noto/NotoRashiHebrew-Regular.ttf
    
  2. 卸载对应包:
    emerge -C <找到的包名>
    

内容的提问来源于stack exchange,提问作者Igor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 07:12:15