QTreeWidget扩大双击动画(QTreeWidget expand animation on

2019-07-03 16:46发布

我创建了一个QTreeWidget并设置动画为true( setAnimated(true) )。 当我在项目的左侧点击一个标记(三角形),它扩展顺利,但是当我在项目双击它扩展太快(几乎就像没有“动画”标志)。 我想在双击流畅的动画效果了。 我怎么解决这个问题?

QTreeView调用QTreeViewPrivate::expandOrCollapseItemAtPos上标记点击QTreeViewPrivate::expand上双击,所以我必须对这些方法不能访问。

我使用PySide创建Qt应用程序(但我试过C ++,问题是一样的)。

Answer 1:

你需要覆盖的点击行为。 检查事件,如果它是一个双击或没有,然后你可以将事件重定向到相应的呼叫。 您应该检查状态,如果它已经点击或不以防止可能发生的第二动画。



Answer 2:

诀窍是,双击也上升默认实现一个单一的点击。 之前扩大动画,默认的实现调用QAbstractItemView::setState(AnimatingState)为动画设定的内部状态。

而在QAbstractItemView::mouseReleaseEvent() QAbstractItemView::setState(NoState)的动画完成之前调用。 在此之后,动画立即终止。

使用下面的代码来解决:

void YourSubTreeView::mouseReleaseEvent(QMouseEvent* event)
{
    QAbstractItemView::State preState = state();
    QTreeView::mouseReleaseEvent(event);
    if (preState == QAbstractItemView::AnimatingState)
        setState(preState);
}


文章来源: QTreeWidget expand animation on double click