有没有办法检测所有字符是否正确显示当前字体?在某些环境和字体中,某些字符将替换为方形符号。
我想自动验证当前字体是否支持GUI中使用的所有字符。
答案 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中创建了一个验证工具。
答案 2 :(得分:0)
根据您的应用,以下可能是一种可能的解决方案 (或完全不适用):
弹出一个对话框,其中包含您打算使用的所有字符的示例段落。
使用您想到的FONT渲染段落。
向用户显示消息
- 选择确定(如果他/她可以阅读文字,即只有没有“正方形”可见)
- 选择其他字体(如果有任何“方块”可见)
注意:如果您想知道,这对于应用来说并不是一种非常罕见的行为。当MS-WORD在doc文件中检测到非标准编码时,它会执行此操作。
古德纳克!!