我创建了一个QTreeWidget
并将动画设置为true(setAnimated(true)
)。
当我点击项目左侧的标记(三角形)时,它会平滑地展开,但是当我双击该项目时,它会扩展得太快(几乎就像没有设置“动画”标记一样)。
我也希望双击平滑动画。我该如何解决这个问题?
QTreeView
在点击标记时调用QTreeViewPrivate::expandOrCollapseItemAtPos
,在双击时调用QTreeViewPrivate::expand
,因此我无法访问这些方法。
我正在使用PySide创建Qt应用程序(但我尝试过C ++并且问题是一样的。)
答案 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);
}