我想使用字体0x00985
在Qt
中显示Unicode代码点Arial Unicode MS
的{{3}}。使用PyQt4
,我写了这个:
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
app = QApplication(sys.argv)
font = QFont('Arial Unicode MS')
font.setPointSize(100)
print QFontInfo(font).family()
print QFontMetrics(font).inFont(QChar(0x00985))
label = QLabel(QChar(0x00985))
label.setFont(font)
label.show()
sys.exit(app.exec_())
但是,标签上没有显示字形;而是有一个白色的盒子。实际上,第二个print语句返回False
,表明Qt
找不到字形。如果代码点0x00985
被替换为代码点0x00A85
,那么glyph的呈现效果很好。
为什么不能绘制代码点0x00985
的字形?
第一个print语句显示所选字体确实是Arial Unicode MS
。 Fonts
中的Windows 10
对话框显示已安装字体Arial Unicode MS Regular
。字体存储在文件ARIALUNI.TTF
中。在appropriate glyph中打开此文件会显示字体中存在Unicode代码点0x00985
的字形,与Qt
报告的内容相反。
根据FontForge,Arial Unicode MS
字体包含Unicode代码点0x00985
的字形。您可以在行动fileformat.info中看到字形。使用here验证存在性。在Chrome
中,通过开发人员工具检查包含字形的元素,表明Arial Unicode MS
用于呈现字形。
编辑:更改了print-statement以使用QFontInfo
。
假设您安装了FreeSans
字体。将脚本中的字体更改为FreeSans
。运行程序;有用。将脚本中的字体更改回Arial Unicode MS
;它仍然有效。但是,使用FontForge
并比较字形,可以看出显示的字形来自FreeSans
。通过卸载FreeSans
获得进一步验证,在这种情况下Arial Unicode MS
再次无效。