QListWidget的一行中的多种字体

问题描述 投票:1回答:1

我需要在'.ui'文件中的QListWidget建议的不同选项中包括文本和希腊符号(用于简单的数学方程式)(我曾经与Qt Designer一起工作,如果重要,我喜欢python)。我希望选项显示如下:

theta = phi^2 (toto et al.)
theta = phi^2.5 (tata et al.)
theta = 1-log(phi/2) (mister brown et al.)
...

用'theta'和'phi'替换为其符号。奇怪的是,事实并非如此简单...

如何在QListWidget的一行中定义几种字体? Qt Designer也有同样的问题。

python pyqt pyqt5 qlistwidget
1个回答
2
投票

一种可能的解决方案是使用HTML生成方程式的符号,例如以下几行:

&theta;  = &phi;<sup>2</sup> (toto et al.)
&theta;  = &phi;<sup>2.5</sup> (tata et al.)
&theta;  = 1-log(&phi;/2) (mister brown et al.)

生成以下输出:

θ=φ2(toto等)θ=φ[2.5](tata等)。θ= 1-log(φ/ 2)(布朗先生等)但是QListWidget无法识别这种格式,对此的解决方案是创建一个代表以识别该格式:

enter image description here

class HTMLDelegate(QtWidgets.QStyledItemDelegate): def paint(self, painter, option, index): self.initStyleOption(option,index) painter.save() doc = QtGui.QTextDocument() doc.setHtml(option.text) option.text = "" option.widget.style().drawControl(QtWidgets.QStyle.CE_ItemViewItem, option, painter) painter.translate(option.rect.left(), option.rect.top()) clip = QtCore.QRectF(0, 0, option.rect.width(), option.rect.height()) doc.drawContents(painter, clip) painter.restore() def sizeHint(self, option, index): self.initStyleOption(option,index) doc = QtGui.QTextDocument() doc.setHtml(option.text) doc.setTextWidth(option.rect.width()) return QtCore.QSize(doc.idealWidth(), doc.size().height())

然后我们将他添加为以下行的代表:

qlistwidget.setItemDelegate(HTMLDelegate())

输出:

enter image description here

完整的例子可以在下面的link中找到

© www.soinside.com 2019 - 2024. All rights reserved.