QTreeWidget在移动项目时会回弹

问题描述 投票:0回答:1

[当我使用QTreeWidget(通过qdesigner)并将dragDropMode设置为InternalMove,然后尝试移动其中一个项目时,滚动条将恢复到我移动的项目的原始位置。我希望滚动条保持在放置项目的位置。有没有简单的方法可以做到这一点?我调整了defaultDropAction,但无济于事。

c++ qt qt5
1个回答
0
投票

想通了...

class MyTree : public QTreeWidget
{
   Q_OBJECT
   public:
      MyTree(QWidget *parent = 0);
   signals:
      void verticalScrollBarValue(int val);
   protected slots:
      void setTreeVerticalScroll(int val);
   protected:
      void dropEvent(QDropEvent *event);
};
MyTree::MyTree(QWidget *parent) : QTreeWidget(parent)
{
   connect(this, &MyTree::verticalScrollBarValue,
           this, &MyTree::setTreeVerticalScroll);
}

void MyTree::setTreeVerticalScroll(int val)
{
   verticalScrollbar()->setValue(val);
}

void MyTree::dropEvent(QDropEvent *event)
{
   int v = verticalScrollbar()->value();
   QTreeWidget::dropEvent(event);
   emit verticalScrollBarValue(v);
}

免责声明:某处可能有错字,我无法直接从工作环境中复制。

© www.soinside.com 2019 - 2024. All rights reserved.