QTreeWidget双击展开动画

时间:2012-11-09 07:49:13

标签: python qt4 python-2.7 pyside qtreewidget

我创建了一个QTreeWidget并将动画设置为true(setAnimated(true))。 当我点击项目左侧的标记(三角形)时,它会平滑地展开,但是当我双击该项目时,它会扩展得太快(几乎就像没有设置“动画”标记一样)。 我也希望双击平滑动画。我该如何解决这个问题?

QTreeView在点击标记时调用QTreeViewPrivate::expandOrCollapseItemAtPos,在双击时调用QTreeViewPrivate::expand,因此我无法访问这些方法。

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

2 个答案:

答案 0 :(得分:1)

您需要覆盖点击行为。检查事件是否是双击,然后您可以将事件重定向到适当的呼叫。您应该检查状态是否已被点击,以防止可能发生的第二个动画。

答案 1 :(得分:0)

诀窍是,双击也可以在默认实现中单击一下。 在展开动画之前,默认实现调用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);
}