【问题标题】:PyQT - Displaying vertical text in QTableWidget cellsPyQT - 在 QTableWidget 单元格中显示垂直文本
【发布时间】:2019-02-09 05:47:25
【问题描述】:

我为我的问题找到了 C++ code,但我无法使用 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))

【问题讨论】:

    标签: python c++ pyqt


    【解决方案1】:

    如果您查看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()
    

    【讨论】:

      猜你喜欢
      • 2012-11-05
      • 1970-01-01
      • 2018-02-04
      • 1970-01-01
      • 2019-02-01
      • 2023-04-02
      • 2019-10-16
      • 1970-01-01
      • 2015-11-09
      相关资源
      最近更新 更多