PYQT QTreeView绘制拖放指示器
时间: 2023-08-27 07:50:18 浏览: 184
QTreeView拖放
5星 · 资源好评率100%
您可以使用QTreeView的两个方法来绘制拖放指示器:drawRow和drawIndent。
首先,您需要在您的QTreeView子类中重写drawRow方法。在该方法中,您可以使用QStyle的drawPrimitive方法来绘制拖放指示器。下面是一个示例:
```python
from PyQt5.QtWidgets import QTreeView, QStyleOptionViewItem, QStyle
class MyTreeView(QTreeView):
def __init__(self, parent=None):
super(MyTreeView, self).__init__(parent)
def drawRow(self, painter, options, index):
# 调用父类的绘制方法
super(MyTreeView, self).drawRow(painter, options, index)
# 如果当前项正在被拖放
if options.state & QStyle.State_Dragging:
# 创建一个QStyleOptionViewItem对象
opt = QStyleOptionViewItem(options)
# 设置指示器的位置和大小
opt.rect = self.visualRect(index)
# 设置指示器的状态
opt.state = QStyle.State_Enabled | QStyle.State_HasFocus
# 绘制指示器
self.style().drawPrimitive(QStyle.PE_IndicatorItemViewItemDrop, opt, painter, self)
```
然后,您还需要重写drawIndent方法来绘制缩进线。这可以通过使用QStyleOptionViewItem的rect属性和QStyle的drawPrimitive方法来完成。以下是一个示例:
```python
from PyQt5.QtWidgets import QTreeView, QStyleOptionViewItem, QStyle
class MyTreeView(QTreeView):
def __init__(self, parent=None):
super(MyTreeView, self).__init__(parent)
def drawIndent(self, painter, option, index):
# 创建一个QStyleOptionViewItem对象
opt = QStyleOptionViewItem(option)
# 设置缩进线的位置和大小
opt.rect = self.visualRect(index)
# 绘制缩进线
self.style().drawPrimitive(QStyle.PE_IndicatorBranch, opt, painter, self)
```
通过使用这两个方法,您可以在QTreeView中绘制拖放指示器和缩进线。
阅读全文