gpt4 book ai didi

c++ - 如何使用 PyQt 正确显示所有 Unicode 字符?

转载 作者:搜寻专家 更新时间:2023-10-31 02:17:09 25 4
gpt4 key购买 nike

我正在尝试在 PyQt 上显示一些 Unicode 字符(我的版本是 PyQt4,来自 Windows 上的 Anaconda)。出于某种原因,它在 Qt Creator 上的 C++ 项目(但使用 Qt5)上工作正常,但在使用 PyQt 时某些字符显示白框。

测试用例:

作为测试,我制作了一个显示 ⏩ 字符的简单应用。我用过 "⏩"文字和 HTML "<html><head/><body><p>&#9193;</p></body></html>"在 QLabel 上。

这在 C++ 中有效:

#include <QApplication>
#include <QLabel>
#include <QChar>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel w("<html><head/><body><p>&#9193;</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>&#9193;</p></body></html>")
w.show()
app.exec_()

我也做了一个.ui在 C++ 和 PyQt 中形成并加载它,结果相同。

问题:

这是 Qt4 中已在 Qt5 中纠正的错误、PyQt 中的错误还是我做错了什么?

最佳答案

这不是错误,您没有做错任何事。

只是为了确认,您要显示的字符是这样的:

>>> import html, unicodedata
>>> unicodedata.name(html.unescape('&#9193;'))
'BLACK RIGHT-POINTING DOUBLE TRIANGLE'

因此,大多数字体都不支持一个非常晦涩的字符 - 包括我系统上的默认字体,即“DejaVu Sans”。事实上,我目前无法在我的系统上找到可以显示它的单一字体。我必须安装“Symbola”字体才能使其正常显示。

据推测,在您的系统上,Qt5 和 Qt4 程序不使用相同的默认应用程序字体,这解释了 PyQt4 测试用例的行为差异。

编辑:

我在 Windows 上测试过 - 该字符也不在那里显示,原因相同:现有字体都不支持该字符。所以我安装了“Symbola”,但我必须明确地将它设置为 PyQt 中的应用程序字体才能使字符正确显示。出于某种原因,usual mechanisms for partial font subsitution on Windows似乎工作不正常 - 但我不知道为什么。唯一能自动正确显示字符的程序是 Firefox。

关于c++ - 如何使用 PyQt 正确显示所有 Unicode 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36068924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com