QTreeView绘图拖放指示器

问题描述:

我需要通过QTreeView中的拖放操作来实现行移动,并在行之间显示拖放指示器。我想知道是否有一种方法可以覆盖指标绘图,因此它仅显示在行之间的所有层次结构中(不是项目周围的矩形),行必须与整行一样宽(而不是一列)。QTreeView绘图拖放指示器

+0

我面临类似的问题。似乎没有人知道(或者想要告诉:P),所以像往常一样,在我有更多时间的情况下,我会通过qt来源挖掘出什么是可能的,哪些不是。只要我知道什么,我会尽力回答你的问题。 –

这可以通过用于绘制小部件的操作风格来实现。我的尝试似乎运作良好,但这有点欺骗了qt的风格系统,所以我不能保证它能在所有平台上的所有可能的风格下工作。所以这里是:

class myViewStyle: public QProxyStyle{ 
public: 
    myViewStyle(QStyle* style = 0); 

    void drawPrimitive (PrimitiveElement element, const QStyleOption * option, QPainter * painter, const QWidget * widget = 0) const; 
}; 

myViewStyle::myViewStyle(QStyle* style) 
    :QProxyStyle(style) 
{} 

void myViewStyle::drawPrimitive (PrimitiveElement element, const QStyleOption * option, QPainter * painter, const QWidget * widget) const{ 
    if (element == QStyle::PE_IndicatorItemViewItemDrop && !option->rect.isNull()){ 
     QStyleOption opt(*option); 
     opt.rect.setLeft(0); 
     if (widget) opt.rect.setRight(widget->width()); 
     QProxyStyle::drawPrimitive(element, &opt, painter, widget); 
     return; 
    } 
    QProxyStyle::drawPrimitive(element, option, painter, widget); 
} 

myView::myView(QWidget *parent) : 
    QTreeView(parent) 
{ 
    setStyle(new myViewStyle(style())); 
} 
+0

非常感谢。你的代码在Xfce-DE中工作正常。将代码“移植”到python中,原因是我没有找到包含在QT中的简单解决方案。学到了一些东西。 – user3469861