2

在我的ProxyStyle课堂上,我有一个drawPrimitive功能,element == QtWidgets.QStyle.PE_IndicatorItemViewItemDrop当用户将项目拖放到我的TreeView.

我设置了动作,以便项目可以放在中间但不能结束。所以我想像这样更改突出显示的颜色: 1- 项目绿色(水平线)之间的线 2- 项目红色(这条线包裹项目)。

你知道怎么做吗?我的drawPrimitive函数有这些参数:

element(str)
option (QtGui.QStyleOptionViewItem)
painter(QtGui.QPainter)
widget (QtWidgets.QWidget)

是否有这样的标志PE_IndicatorItemViewItemDrop指示物品是否会在两者之间或上方掉落?

4

1 回答 1

1

根据github上 Qt 的 5.11 分支中最新的,测试是简单的高度等于 0:

case PE_IndicatorItemViewItemDrop: {
    QRect rect = opt->rect;
    if (opt->rect.height() == 0)
        p->drawLine(rect.topLeft(), rect.topRight());
    else
        p->drawRect(rect);
    break; }

您的代码应该使用相同的测试来决定使用哪种颜色。如果option.rect.height == 0那么Qt::green其他Qt::red。复制当前的 QPen 并更改其颜色,然后调用基类的 drawPrimitive。以下伪代码就足够了:

lastPen = painter.pen()
myPen = QtGui.QPen(lastPen)
if (option.rect.height() == 0):
    myPen.setColor(Qt.green)
else:
    myPen.setColor(Qt.red)
painter.setPen(myPen)
QProxyStyle.drawPrimitive(self, element, option, painter, widget)
painter.setPen(pen)

对不起,如果代码很难看。我不知道 PySide,只知道 C++ Qt。

于 2018-06-12T19:28:40.467 回答