C++ 如何检测丢失的字体字符

C++ 如何检测丢失的字体字符,c++,user-interface,qt,qt4,C++,User Interface,Qt,Qt4,是否有办法检测所有字符是否以当前字体正确显示?在某些环境和字体中,某些字符将替换为方形符号 我想自动验证当前字体是否支持GUI中使用的所有字符。可能的解决方案。。。 根据您的应用程序,以下可能是一种可行的解决方案 (或完全不适用): 弹出一个对话框,其中包含一个示例段落,其中包含要使用的所有字符 使用你心目中的字体呈现段落 向用户显示一条消息,以便 --选择OK(如果他/她可以阅读文本,即仅当没有可见的“方块”时) --选择其他字体(如果任何“正方形”可见) 注意:如果您想知道,这对于应

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

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

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

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

  • 使用你心目中的字体呈现段落

  • 向用户显示一条消息,以便

    --选择OK(如果他/她可以阅读文本,即仅当没有可见的“方块”时)

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

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


祝你好运

我使用该类找到了一个可能的解决方案。下面是一个示例函数,用于查询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;
}
bool字符处理(常量QLabel&label){
QFontMetrics度量(label.font());
对于(int i=0;i

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

根据本文的讨论,我认为QFontMetrics的示例代码不会很好地工作。

QFontMetrics inFont()函数依赖于QFont类,而且它似乎必须将StyleStrategy设置为QFont::NoFontMerging。但实际上,NoFontMerging标志并没有按照您认为的方式工作,因此如果系统中的其他字体具有此标志符号,inFont函数仍然会返回true

顺便说一句,我最后用python制作了一个验证工具


虽然此链接可以回答问题,但您应该避免使用仅链接的答案。