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 для генерации символов уравнения, например, следующие строки:
θ = φ<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())
Выход:
Полный пример можно найти по следующей ссылке