【问题标题】:Can you set the animation speed of a QTreeWidget?你可以设置 QTreeWidget 的动画速度吗?
【发布时间】:2021-08-02 15:24:26
【问题描述】:

您可以将QTreeWidget 设置为动画:

tree_widget = QtWidgets.QTreeWidget()
tree_widget.setAnimated(True)

这将使QTreeWidgetItems 在折叠和展开时动画化。

有没有办法像QtCore.QVariantAnimation()一样访问和编辑动画速度和类型?

如果可能的话,我希望能够更改速度和动画类型(例如,QtCore.QEasingCurve.Linear)。

【问题讨论】:

    标签: qt pyside2 qtreeview qtreewidget


    【解决方案1】:

    让我们追踪源头;

    1. 当我们寻找animated 属性时,我们可以find out 它实际上是QTreeView 类的一部分。
    2. 所以首先我们需要检查他们是否提供了一个公共方法(可能名为 set/addAnimation)来访问/操作这个属性。但是没有。 (不完全正确,请参阅更新部分)
    3. 然后我们要查看QTreeView的源代码。将line 910 处的属性设置为animationsEnabled 标志。
    4. 当我们在line 3096line 3113 查找根据此标志采取的操作时
    5. 不幸的是,根据文档字符串,这些方法是 QTreeViewPrivate 类的一部分,而不是 Qt API 的一部分:

    W A R N I N G

    此文件不是 Qt API 的一部分。它纯粹作为一个存在 实施细节。此头文件可能会从版本更改为 版本,恕不另行通知,甚至被删除。

    我们是认真的。

    所以,我没有看到直接访问或更改它而不接触和构建源代码的方法。


    更新

    我最近在Qt Style Sheet Reference 中发现了一个widget-animation-duration 属性,可以用样式表覆盖内置动画持续时间值,并决定将其附加到此处。但是,支持哪些小部件的文档很少。幸运的是,我在 google hacking 的帮助下找到了related commit

    "widget-animation-duration" inurl:"code.qt.io"
    

    差异统计

    -rw-r--r-- src/widgets/doc/sn-ps/code/doc_src_stylesheet.qdoc 4
    -rw-r--r-- src/widgets/doc/src/widgets-and-layouts/stylesheet.qdoc 16
    -rw-r--r-- src/widgets/itemviews/qcolumnview.cpp 6
    -rw-r--r-- src/widgets/itemviews/qtreeview.cpp 2
    -rw-r--r-- src/widgets/styles/qcommonstyle.cpp 5
    -rw-r--r-- src/widgets/styles/qstyle.cpp 9
    -rw-r--r-- src/widgets/styles/qstyle.h 1
    -rw-r--r-- src/widgets/styles/qstylesheetstyle.cpp 4
    -rw-r--r-- src/widgets/widgets/qtabbar_p.h 2
    -rw-r--r-- src/widgets/widgets/qwidgetanimator.cpp 4
    10 个文件更改,41 个插入,12 个删除

    QColumnView 和 QWidgetAnimator 类有这些行,我在测试时能够更改 QColumnView 动画的持续时间。

    if (const int animationDuration = style()->styleHint(QStyle::SH_Widget_Animation_Duration, 0, this)) {
        d->currentAnimation.setDuration(animationDuration);
    

    但是: QTreeView 实现只检查标志的存在,但不使用它的值尚未,因为它们通过将树渲染到像素图并按像素绘制来对其进行动画处理。我们可以假设他们会使用它,因为这看起来像是在为它做准备:

    animationsEnabled = q->style()->styleHint(QStyle::SH_Widget_Animation_Duration, 0, q) > 0;
    

    【讨论】:

      猜你喜欢
      • 2023-01-22
      • 2022-11-05
      • 2018-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      • 2015-04-14
      • 1970-01-01
      相关资源
      最近更新 更多