это легко разрешимо с помощью qt с использованием c ++: вы можете определить новый стиль, переопределить метод drawPrimitive и выполнять там произвольную рисование (или просто ничего не делать) всякий раз, когда константа QStyle :: PE_IndicatorItemViewItemDrop получена через элемент параметр. Ниже приведен пример:
class TestStyle : public QProxyStyle
{
public:
TestStyle(QStyle *baseStyle = 0) : QProxyStyle(baseStyle) {}
void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const
{
if (element == QStyle::PE_IndicatorItemViewItemDrop)
{
//?? do nothing or do custom painting here
}
else
{
QProxyStyle::drawPrimitive(element, option, painter, widget);
}
}
};
..
ui->treeView->setStyle(new TestStyle(ui->treeView->style()));
теперь плохие новости заключаются в том, что pyqt ничего не знает о QProxyStyle; Похоже, что он там не обернут, поэтому, чтобы это работало, вам нужно обернуть классы стиля самостоятельно.
другое решение - создать собственный потомок QTreeView и переопределить его paintEvent метод. Реализация по умолчанию вызывает drawTree и paintDropIndicator; где paintDropIndicator отвечает за индикатор перетаскивания, а drawTree отображает элементы дерева. DrawTree защищен и доступен для звонков с вашего paintEvent:
class TestTreeView : public QTreeView
{
public:
explicit TestTreeView(QWidget *parent = 0) : QTreeView(parent) {}
void paintEvent(QPaintEvent * event)
{
QPainter painter(viewport());
drawTree(&painter, event->region());
}
};
это должно подавить индикатор перетаскивания по умолчанию. Дайте мне знать, если у вас возникли проблемы с преобразованием его в python.
надеюсь, это поможет, с уважением