当鼠标悬停在项目上或项目之间时显示不同颜色的拖放突出显示
Show different color of drag and drop highlight when mouse is over or between items
在我的 ProxyStyle
class 中,我有一个 drawPrimitive
函数,当用户在我的项目中拖放项目时,我检查 element == QtWidgets.QStyle.PE_IndicatorItemViewItemDrop
是否画一条绿线TreeView
.
我设置了动作,使项目可以在中间放置但不能结束。所以我想像这样更改突出显示的颜色:
1- 项目绿色之间的线(水平线)
2- 红色项目上方的行(此行包裹项目)。
你知道怎么做吗?我的 drawPrimitive
函数有这些参数:
element(str)
option (QtGui.QStyleOptionViewItem)
painter(QtGui.QPainter)
widget (QtWidgets.QWidget)
是否有像 PE_IndicatorItemViewItemDrop
这样的标志,指示项目是否会在中间或上方掉落?
根据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并改变它的颜色,然后调用baseclass'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。
在我的 ProxyStyle
class 中,我有一个 drawPrimitive
函数,当用户在我的项目中拖放项目时,我检查 element == QtWidgets.QStyle.PE_IndicatorItemViewItemDrop
是否画一条绿线TreeView
.
我设置了动作,使项目可以在中间放置但不能结束。所以我想像这样更改突出显示的颜色: 1- 项目绿色之间的线(水平线) 2- 红色项目上方的行(此行包裹项目)。
你知道怎么做吗?我的 drawPrimitive
函数有这些参数:
element(str)
option (QtGui.QStyleOptionViewItem)
painter(QtGui.QPainter)
widget (QtWidgets.QWidget)
是否有像 PE_IndicatorItemViewItemDrop
这样的标志,指示项目是否会在中间或上方掉落?
根据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并改变它的颜色,然后调用baseclass'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。