Показывать разные цвета перетаскивания, когда мышь находится над или между элементами - PullRequest
0 голосов
/ 05 июня 2018

В моем классе 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 голосов
/ 12 июня 2018

Согласно последней ветке 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 == 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.

...