Qt中未显示Unicode字形

时间:2016-07-04 22:33:37

标签: qt unicode pyqt4

我想使用字体0x00985Qt中显示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 MSFonts中的Windows 10对话框显示已安装字体Arial Unicode MS Regular。字体存储在文件ARIALUNI.TTF中。在appropriate glyph中打开此文件会显示字体中存在Unicode代码点0x00985的字形,与Qt报告的内容相反。

雕文存在

根据FontForgeArial 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再次无效。

0 个答案:

没有答案