[英]PyQT - Displaying vertical text in QTableWidget cells
我找到了解決問題的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))
如果您查看的是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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.