鼠标悬停或项目

时间:2018-06-05 14:06:35

标签: qt pyside pyside2

在我的ProxyStyle课程中,我有一个drawPrimitive功能,当用户在我的element == QtWidgets.QStyle.PE_IndicatorItemViewItemDrop中拖放项目时,我会检查TreeView是否绘制绿线。

我设置了动作,以便项目可以在两者之间但不会结束。所以我想像这样改变高光的颜色: 项目绿色(水平线)之间的1行 项目红色的2行(此行包装项目)。

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

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

是否有像PE_IndicatorItemViewItemDrop这样的旗帜,表明某件物品是否会在两者之间或之上掉落?

1 个答案:

答案 0 :(得分:1)

根据Qt的5.11分支github的最新内容,测试是一个简单的高度等于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 == 0Qt::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。