qt designer: несколько шрифтов в одной строке 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.)
...

с тэтой и фи заменены их символом. Как ни странно, это оказывается не так просто...

Как определить несколько шрифтов в одной строке QListWidget? Тот же вопрос с Qt Designer.

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 (всего и др.)
θ = φ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())

Выход:

Полный пример можно найти по следующей ссылке

Другие вопросы по тегам