我创建了一个QTreeWidget
并设置动画为true( setAnimated(true)
)。 当我在项目的左侧点击一个标记(三角形),它扩展顺利,但是当我在项目双击它扩展太快(几乎就像没有“动画”标志)。 我想在双击流畅的动画效果了。 我怎么解决这个问题?
QTreeView
调用QTreeViewPrivate::expandOrCollapseItemAtPos
上标记点击QTreeViewPrivate::expand
上双击,所以我必须对这些方法不能访问。
我使用PySide创建Qt应用程序(但我试过C ++,问题是一样的)。
你需要覆盖的点击行为。 检查事件,如果它是一个双击或没有,然后你可以将事件重定向到相应的呼叫。 您应该检查状态,如果它已经点击或不以防止可能发生的第二动画。
诀窍是,双击也上升默认实现一个单一的点击。 之前扩大动画,默认的实现调用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);
}