Html 可以为特定的Unicode字符分配不同的Qfont吗?

Html 可以为特定的Unicode字符分配不同的Qfont吗?,html,unicode,fonts,internationalization,qt4,Html,Unicode,Fonts,Internationalization,Qt4,我需要在QLabel中的同一个字符串中显示多个国际脚本 例如,QLabel可以显示: چاچيचाची ćāćī(dim.ofćāćā,q.v.),s.f.一位姑妈(=ćAćī,q.v.) 上面的字符串包括拉丁文字、人字阿拉伯文和德凡āgarī文字(属于印度文字家族) 每个脚本需要不同的字体系列和大小。例如,字符串中的第一个单词是乌尔都语,需要能够显示ے的字体。此外,我可能想使用某种类型的书法(乌尔都语传统上使用“Nastaleeq”字体)。此外,书法可能需要增加字体大小,以便于阅读(并非所有的

我需要在QLabel中的同一个字符串中显示多个国际脚本

例如,QLabel可以显示:

چاچيचाची ćāćī(dim.ofćāćā,q.v.),s.f.一位姑妈(=ćAćī,q.v.)

上面的字符串包括拉丁文字、人字阿拉伯文和德凡āgarī文字(属于印度文字家族)

每个脚本需要不同的字体系列和大小。例如,字符串中的第一个单词是乌尔都语,需要能够显示
ے
的字体。此外,我可能想使用某种类型的书法(乌尔都语传统上使用“Nastaleeq”字体)。此外,书法可能需要增加字体大小,以便于阅读(并非所有的文字都像汉语象形图一样呈规则的方形,如果你对国际文字的多样性不太了解,请看一看。)总之,我希望每个文字都以特定的字体和大小显示

目前,我为QLabel提供了一个复杂的HTML字符串,通过指定字符串特定部分使用的字体和大小,我一点一点地编写该字符串

该函数返回支持特定字体的字体列表

编辑

从根本上说,您的问题似乎是关于unicode以及它对将脚本名称分配给unicode代码点的支持。理论上,Qt可以使用unicode数据库来确定它呈现的每个文本字符的脚本,并可能使用该信息对其应用不同的格式

然而,似乎没有任何明显的API为这一点提供支持

例如,该类可能有一个
enum
For和一个
scriptName
函数,该函数将为特定的unicode字符返回相应的值,这似乎是合理的。但在Qt4或Qt5中都没有这样的东西

所以我要在这里坚持到底,并且猜测html/css是在这个时候实现您想要的东西的唯一方法

更新

python的模块似乎也不支持脚本名称

然而,它提供了一个解决方案,有可能开发出一个自主开发的解决方案

下面是一个演示脚本,它使用上面答案中的模块自动为
QLabel
生成html:

# -*- coding: utf8 -*-

import unicodedata2
from itertools import groupby
from PyQt4 import QtGui, QtCore

text = (u'چاچي चाची ćāćī (dim. of ćāćā, q.v.), '
        u's.f. A paternal aunt (=ćaćī, q.v.)')

markup = [
"""
<html>
<style type="text/css">
body {font-family: Sans Serif; font-size: 8pt}
span.arabic {font-family: ClearlyU Arabic; font-size: 18pt}
span.devanagari {font-family: ClearlyU Devanagari; font-size: 12pt}
</style>
<body>
"""
]

for script, group in groupby(text, unicodedata2.script):
    script = script.lower()
    chunk = ''.join(group)
    if script == 'common' or script == 'latin':
        markup.append(chunk)
    else:
        markup.append('<span class="%s">%s</span>' % (script, chunk))

markup.append(
"""
</body>
</html>
"""
)

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.label = QtGui.QLabel(self)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.label)
        self.label.setText(''.join(markup))

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())
#-*-编码:utf8-*-
导入Unicode数据2
从itertools导入groupby
从PyQt4导入QtGui、QtCore
文本=(u'چاچي)चाची āāāāā,q.v.,'
u.s.f.一位姑妈(=ćAćī,q.v.))
标记=[
"""
正文{字体系列:无衬线;字体大小:8pt}
span.arabic{font-family:ClearlyU-arabic;字体大小:18pt}
span.devanagari{字体系列:ClearlyU devanagari;字体大小:12pt}
"""
]
对于脚本,在groupby中分组(文本,unicodata2.script):
script=script.lower()
chunk=''。加入(组)
如果脚本=='common'或脚本=='latin':
markup.append(块)
其他:
markup.append(“%s%”(脚本,块))
markup.append(
"""
"""
)
类窗口(QtGui.QWidget):
定义初始化(自):
QtGui.QWidget.\uuuuu init\uuuuuuu(self)
self.label=QtGui.QLabel(self)
layout=QtGui.QVBoxLayout(self)
layout.addWidget(self.label)
self.label.setText(“”.join(标记))
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
导入系统
app=QtGui.QApplication(sys.argv)
window=window()
window.show()
sys.exit(app.exec_())

如何使用此数据库?由于这个原因,同一字符串中的多个脚本是否会以各自的字体和大小显示在QLabel中?@Benjamin。使用
setFont
一次只能设置一种字体:
QFontDatabase
只是提供了一种方法,可以找到适合给定书写系统的字体。但不清楚你到底想要什么。如果你用一个具体的例子更新了你的问题,并展示了你当前正在使用的代码,这会有所帮助。@Benjamin。我已经更新了我的答案,并提出了一个可能有助于解决您问题的解决方案。