【问题标题】:QTreeView draw drop indicatorQTreeView 绘制下降指示器
【发布时间】:2011-09-29 11:19:37
【问题描述】:

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

【问题讨论】:

  • 我面临着类似的问题。似乎没有人知道(或想告诉:P),所以在这种情况下,像往常一样,当我有更多时间时,我会挖掘 qt 资源以找出什么是可能的,什么是不可能的。一旦我知道一些事情,我会尽力回答你的问题。

标签: qt qtreeview indicator


【解决方案1】:

可以通过修改用于绘制小部件的样式。我的尝试似乎效果很好,但它有点欺骗了 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 中包含的简单解决方案。学到了一些东西。
  • 我知道已经 6 年了,但是你能分享你的 python 代码吗?我有一个类似的问题。
  • @Mrtnchps 你可以在这里找到python代码:web.archive.org/web/http://apocalyptech.com/linux/qt/qtableview
猜你喜欢
  • 2016-02-13
  • 2022-09-28
  • 2019-02-21
  • 1970-01-01
  • 2018-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-23
相关资源
最近更新 更多