qt designer:QListWidget

时间:2017-12-19 16:11:02

标签: pyqt pyqt5 qt-designer qlistwidget

我需要在'.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同样的问题。

1 个答案:

答案 0 :(得分:1)

一种可能的解决方案是使用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

中找到