[当我使用QTreeWidget(通过qdesigner)并将dragDropMode设置为InternalMove,然后尝试移动其中一个项目时,滚动条将恢复到我移动的项目的原始位置。我希望滚动条保持在放置项目的位置。有没有简单的方法可以做到这一点?我调整了defaultDropAction,但无济于事。
想通了...
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);
}
免责声明:某处可能有错字,我无法直接从工作环境中复制。