4
我需要通過QTreeView中的拖放操作來實現行移動,並在行之間顯示拖放指示器。我想知道是否有一種方法可以覆蓋指標繪圖,因此它僅顯示在行之間的所有層次結構中(不是項目周圍的矩形),行必須與整行一樣寬(而不是一列)。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()));
}
非常感謝。你的代碼在Xfce-DE中工作正常。將代碼「移植」到python中,原因是我沒有找到包含在QT中的簡單解決方案。學到了一些東西。 – user3469861
我面臨類似的問題。似乎沒有人知道(或者想要告訴:P),所以像往常一樣,在我有更多時間的情況下,我會通過qt來源挖掘出什麼是可能的,哪些不是。只要我知道什麼,我會盡力回答你的問題。 –