PyQT - отображение вертикального текста в ячейках QTableWidget - PullRequest
0 голосов
/ 04 сентября 2018

Я нашел C ++ код для моего вопроса, но я не могу заставить его работать с использованием Python. Я не знаю C ++, это как рекурсия там ...

class VerticalTextDelegate(QtGui.QStyledItemDelegate):
    def __init__(self, parent):
        super(VerticalTextDelegate, self).__init__()

    def paint(self, painter, option, index):
        optionCopy = QtGui.QStyleOptionViewItem(option)
        rectCenter = QtCore.QPointF(QtCore.QRectF(option.rect).center())
        painter.save()
        painter.translate(rectCenter.x(), rectCenter.y())
        painter.rotate(-90.0)
        painter.translate(-rectCenter.x(), -rectCenter.y())
        optionCopy.rect = painter.worldTransform().mapRect(option.rect)

        # recursion here, I don't understand how it works in C++
        # self.paint(painter, optionCopy, index)

        self.painter.restore()

    def sizeHint(self, option, index):
        val = QtGui.QSize(self.sizeHint(option, index))
        return QtGui.QSize(val.height(), val.width())

Рабочий код:

    item = QtGui.QTableWidgetItem("test")
    self.table_widget.setItem(2, 0, item)

    self.table_widget.setItemDelegateForColumn(0,VerticalTextDelegate(self))

1 Ответ

0 голосов
/ 04 сентября 2018

Если вы посмотрите на пример C++, на который ссылаетесь, то увидите, что реализация VerticalTextDelegate::paint в основном исправляет преобразование QPainter, а затем вызывает реализацию базового класса QStyledItemDelegate::paint. Вы должны сделать то же самое (не проверено) ...

def paint(self, painter, option, index):
    optionCopy = QtGui.QStyleOptionViewItem(option)
    rectCenter = QtCore.QPointF(QtCore.QRectF(option.rect).center())
    painter.save()
    painter.translate(rectCenter.x(), rectCenter.y())
    painter.rotate(-90.0)
    painter.translate(-rectCenter.x(), -rectCenter.y())
    optionCopy.rect = painter.worldTransform().mapRect(option.rect)

    # Call the base class implementation
    super(VerticalTextDelegate, self).paint(painter, optionCopy, index)

    painter.restore()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...