【发布时间】:2010-04-21 08:43:09
【问题描述】:
有没有办法检测到所有字符都以当前字体正确显示?在某些环境和字体中,某些字符被替换为方形符号。
我想自动验证当前字体是否支持 GUI 中使用的所有字符。
【问题讨论】:
标签: c++ user-interface qt qt4
有没有办法检测到所有字符都以当前字体正确显示?在某些环境和字体中,某些字符被替换为方形符号。
我想自动验证当前字体是否支持 GUI 中使用的所有字符。
【问题讨论】:
标签: c++ user-interface qt qt4
我找到了使用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;
}
当然,向用户显示缺少哪个字符会很好,但当然必须使用不同的字体来完成 :)
【讨论】:
根据这个讨论,我认为 QFontMetrics 的示例代码不会很好地工作。 https://bugreports.qt-project.org/browse/QTBUG-1732
QFontMetrics inFont() 函数依赖于 QFont 类,似乎您必须将 StyleStrategy 设置为 QFont::NoFontMerging。但实际上,NoFontMerging 标志并没有按照你想象的那样工作,所以如果你系统中的其他字体有这个字形,inFont 函数仍然返回 true。
顺便说一句,我终于在python中做了一个验证工具。
【讨论】:
根据您的应用程序,以下可能是一种可能的解决方案
(或完全不适用):
弹出一个对话框,其中包含您打算使用的所有字符的示例段落。
使用您想到的字体呈现段落。
向用户显示一条消息
-- 选择确定(如果他/她可以阅读文本,即只有在没有“方块”可见的情况下)
-- 选择不同的字体(如果有任何“正方形”可见)
注意:如果您想知道,这对于应用程序来说并不少见。 MS-WORD 在检测到 doc 文件中的非标准编码时会执行此操作。
祝你好运!!
【讨论】: