【问题标题】:How to detect missing font characters如何检测丢失的字体字符
【发布时间】:2010-04-21 08:43:09
【问题描述】:

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

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

【问题讨论】:

    标签: c++ user-interface qt qt4


    【解决方案1】:

    我找到了使用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;
    }
    

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

    【讨论】:

      【解决方案2】:

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

      QFontMetrics inFont() 函数依赖于 QFont 类,似乎您必须将 StyleStrategy 设置为 QFont::NoFontMerging。但实际上,NoFontMerging 标志并没有按照你想象的那样工作,所以如果你系统中的其他字体有这个字形,inFont 函数仍然返回 true。

      顺便说一句,我终于在python中做了一个验证工具。

      https://github.com/diro/pyGlyphChecker

      【讨论】:

      • 虽然此链接可能会回答问题,但您应避免仅提供链接的答案。
      【解决方案3】:

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


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

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

      • 使用您想到的字体呈现段落。

      • 向用户显示一条消息

        -- 选择确定(如果他/她可以阅读文本,即只有在没有“方块”可见的情况下)

        -- 选择不同的字体(如果有任何“正方形”可见)

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

      祝你好运!!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-24
        • 2012-08-18
        • 2011-05-19
        • 1970-01-01
        • 1970-01-01
        • 2011-05-29
        • 1970-01-01
        • 2017-01-11
        相关资源
        最近更新 更多