4

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

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

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

4

2 回答 2

1

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

于 2013-03-05T19:32:16.007 回答
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);
}
于 2013-10-18T04:20:08.190 回答