2012-11-09 55 views
4

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

QTreeView拨打电话QTreeViewPrivate::expandOrCollapseItemAtPos标记点击和QTreeViewPrivate::expand双击,所以我无法访问这些方法。

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

+3

你能发布您的代码的可管理的版本? – 2012-12-31 12:23:57

+2

你可以把'itemDoubleClicked'信号连接到扩展槽吗? – Jeff

回答

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); 
}