如何检测丢失的字体字符

时间:2010-04-21 08:43:10

标签: c++ user-interface qt qt4

有没有办法检测所有字符是否正确显示当前字体?在某些环境和字体中,某些字符将替换为方形符号。

我想自动验证当前字体是否支持GUI中使用的所有字符。

3 个答案:

答案 0 :(得分:2)

我找到了使用QFontMetrics类的可能解决方案。这是一个示例函数,用于查询QLabel的当前文本中是否所有字符都可用:

bool charactersMissing(const QLabel& label) {
    QFontMetrics metrics(label.font());
    for (int i = 0; i < label.text().size(); ++i) {
        if (!metrics.inFont(label.text().at(i))) {
            return true;
        }
    }
    return false;
}

当然向用户显示哪个字符缺失会很好,但当然必须使用不同的字体:)

答案 1 :(得分:1)

根据这个讨论,我认为QFontMetrics的示例代码不会很好。 https://bugreports.qt-project.org/browse/QTBUG-1732

QFontMetrics inFont()函数依赖于QFont类,似乎你必须将StyleStrategy设置为QFont :: NoFontMerging。但实际上,NoFontMerging标志不会以您认为的方式工作,因此如果系统中的其他字体具有此字形,则inFont函数仍会返回true。

顺便说一下,我最终在python中创建了一个验证工具。

https://github.com/diro/pyGlyphChecker

答案 2 :(得分:0)

一种可能的解决方案......


根据您的应用,以下可能是一种可能的解决方案 (或完全不适用):

  • 弹出一个对话框,其中包含您打算使用的所有字符的示例段落。

  • 使用您想到的FONT渲染段落。

  • 向用户显示消息

      

    - 选择确定(如果他/她可以阅读文字,即只有没有“正方形”可见)

         

    - 选择其他字体(如果有任何“方块”可见)

注意:如果您想知道,这对于应用来说并不是一种非常罕见的行为。当MS-WORD在doc文件中检测到非标准编码时,它会执行此操作。

古德纳克!!