【问题标题】:QTreeWidget expand animation on double clickQTreeWidget双击展开动画
【发布时间】:2018-04-23 10:32:28
【问题描述】:

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

QTreeView 在标记单击时调用QTreeViewPrivate::expandOrCollapseItemAtPos,在双击时调用QTreeViewPrivate::expand,所以我无法访问这些方法。

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

【问题讨论】:

  • 您能发布一个可管理的代码版本吗?
  • 你能把itemDoubleClicked信号连接到扩展槽吗?

标签: python qt4 python-2.7 pyside qtreewidget


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-10-29
      • 1970-01-01
      • 2016-08-09
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-28
      • 2016-07-03
      相关资源
      最近更新 更多