我试图在PyQt上显示几个Unicode字符(我的版本是PyQt4,来自Windows)。出于某种原因,它可以在Qt5上的C++项目中正常工作(但使用Qt5),但是一些字符在使用PyQt时显示白色框。
测试用例:
作为一个测试,我制作了一个简单的应用程序来显示⏩字符。我在一个"⏩"
上使用了"<html><head/><body><p>⏩</p></body></html>"
文本和HTML。
这在C++中是可行的:
#include <QApplication>
#include <QLabel>
#include <QChar>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel w("<html><head/><body><p>⏩</p></body></html>");
w.show();
return a.exec();
}
但这给我展示了一个白色的方框,里面的字符应该是:
from PyQt4 import QtCore, QtGui, uic, Qt
app = QtGui.QApplication([])
w = QtGui.QLabel("<html><head/><body><p>⏩</p></body></html>")
w.show()
app.exec_()
我还做了一个.ui
表单,并在C++和PyQt中加载了它,结果是相同的。
问题:
这是Qt4中的一个在Qt5中纠正的bug,还是PyQt中的一个bug,还是我做错了什么?
发布于 2016-03-17 20:18:54
这不是窃听器,你也没做错什么。
为了确认一下,你要显示的字符是:
>>> import html, unicodedata
>>> unicodedata.name(html.unescape('⏩'))
'BLACK RIGHT-POINTING DOUBLE TRIANGLE'
因此,大多数字体都不支持一个相当晦涩的字符--包括我的系统上的默认字体,即"DejaVu Sans“。事实上,我无法在我的系统中找到一种能够显示它的字体。我必须安装“双曲线”字体,以使它正确地显示。
据推测,在您的系统上,Qt5和Qt4程序不使用相同的默认应用程序字体,这解释了PyQt4测试用例的行为差异。
编辑
我在Windows上进行了测试--这个字符也不显示在那里,原因也是一样的:现有的字体都不支持这个字符。因此,我安装了“双曲线”,但为了使字符正确显示,我必须在PyQt中显式设置它为应用程序字体。由于某些原因,Windows下部分字体转换的常用机制似乎没有正常工作--但我不知道为什么。唯一自动显示字符的程序是Firefox。
https://stackoverflow.com/questions/36068924
复制相似问题