QTreeView绘图拖放指示器
问题描述:
我需要通过QTreeView中的拖放操作来实现行移动,并在行之间显示拖放指示器。我想知道是否有一种方法可以覆盖指标绘图,因此它仅显示在行之间的所有层次结构中(不是项目周围的矩形),行必须与整行一样宽(而不是一列)。QTreeView绘图拖放指示器
答
这可以通过用于绘制小部件的操作风格来实现。我的尝试似乎运作良好,但这有点欺骗了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
我面临类似的问题。似乎没有人知道(或者想要告诉:P),所以像往常一样,在我有更多时间的情况下,我会通过qt来源挖掘出什么是可能的,哪些不是。只要我知道什么,我会尽力回答你的问题。 –