PyQT-在QTableWidget单元格中显示垂直文本 我发现了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())

PyQT-在QTableWidget单元格中显示垂直文本 我发现了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()),python,c++,pyqt,Python,C++,Pyqt,运行代码: item = QtGui.QTableWidgetItem("test") self.table_widget.setItem(2, 0, item) self.table_widget.setItemDelegateForColumn(0,VerticalTextDelegate(self)) 如果您参考C++实例,您会看到VistaTyTraveAdto::Price实现基本上是修复QGeisher变换,然后调用基类实现QSytLeDeMeCuto::

运行代码:

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

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

如果您参考C++实例,您会看到VistaTyTraveAdto::Price实现基本上是修复QGeisher变换,然后调用基类实现QSytLeDeMeCuto::Price。你需要做同样未经测试的事情

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()