QListWidget 一行中的多种字体
multiple fonts in one line of a QListWidget
我需要在 QListWidget 在“.ui”文件中提出的不同选项中包含文本和希腊符号(用于简单的数学方程式)(我以前使用 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 同样的问题。
一种可能的解决方案是使用 HTML 生成等式的符号,例如以下几行:
θ = φ<sup>2</sup> (toto et al.)
θ = φ<sup>2.5</sup> (tata et al.)
θ = 1-log(φ/2) (mister brown et al.)
生成以下输出:
θ = φ2(托托等人)
θ = φ2.5(塔塔等人)
θ = 1-log(φ/2)(布朗先生等人)
但是 QListWidget 不识别这种格式,解决这个问题的方法是创建一个委托来识别这种格式:
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())
输出:
完整的例子可以在下面找到link
我需要在 QListWidget 在“.ui”文件中提出的不同选项中包含文本和希腊符号(用于简单的数学方程式)(我以前使用 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 同样的问题。
一种可能的解决方案是使用 HTML 生成等式的符号,例如以下几行:
θ = φ<sup>2</sup> (toto et al.)
θ = φ<sup>2.5</sup> (tata et al.)
θ = 1-log(φ/2) (mister brown et al.)
生成以下输出:
θ = φ2(托托等人)
θ = φ2.5(塔塔等人)
θ = 1-log(φ/2)(布朗先生等人)
但是 QListWidget 不识别这种格式,解决这个问题的方法是创建一个委托来识别这种格式:
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())
输出:
完整的例子可以在下面找到link