如何设置 QTreeWidgetItem 上箭头的对齐方式

How can I set the alignment of the arrows on a QTreeWidgetItem

我希望这些 TreeWidget 箭头与 TreeWidgetItem 的顶部对齐。

我有一个 QtWidgets.QTreeWidget(),并创建了一个自定义 QtWidgets.QTreeWidgetItem()

然后我设置一个自定义项目小部件self.tree_widget.setItemWidget(self.tree_widget_item, 0, self.main_widget)

因此,装饰器/箭头将自身均匀地定位在几何体的中心,但我希望它在顶部对齐。

我一直在考虑为此设置对齐方式,但我不是 100% 确定在哪里设置它,或者我是否需要通过样式设置它 sheet。如果我无法移动它,我可以创建一个自定义小部件来替换装饰器,并隐藏默认的小部件,但如果可能的话我更愿意使用这里的东西。 有任何想法吗?谢谢!

您可以重新实现 QTreeView.drawBranches 并为用于绘制每个分支的 QRect 设置较小的高度。如果箭头是对称的,简单地使用宽度是一个很好的值。

import sys
from PySide2.QtWidgets import *

class Tree(QTreeWidget):

    def drawBranches(self, painter, rect, index):
        rect.setHeight(rect.width())
        super().drawBranches(painter, rect, index)
        

if __name__ == '__main__':
    app = QApplication(sys.argv)
    tree = Tree()
    for i in range(5):
        item = QTreeWidgetItem([f'Item {i}\n\n'])
        item.addChild(QTreeWidgetItem([f'Child {i}']))
        tree.addTopLevelItem(item)
    tree.show()
    sys.exit(app.exec_())

之前 |之后: