【问题标题】:How to show/hide a child QWidget with a motion animation?如何显示/隐藏带有运动动画的子 QWidget?
【发布时间】:2011-10-29 20:07:34
【问题描述】:

我正在开发一个有两个孩子的应用程序。一个是用作工具栏的小部件,下面的第二个用作仪表板,信息将显示在其上。后者可以通过前者上的按钮显示/隐藏。 Here's a screen-cast of the prototype.

现在我正在考虑做同样的事情,但在显示/隐藏下部小部件时使用运动动画。

简而言之:效果应该是在切换仪表板时给人一种整个应用程序逐渐上升或下降的印象。

详细说明:我希望下部小部件的高度减小,直到它减小到 0,然后完全隐藏。同样,再次显示小部件时它会缓慢增加。同时,应用程序的位置应相应更改,使其停留在屏幕底部。

我该怎么做?我以前从未在 Qt 上做过动画。如果您没有答案,您是否知道可以引导我到达那里的优质教程。

注意:我正在使用 PyQt。

【问题讨论】:

    标签: python animation qt4 pyqt


    【解决方案1】:

    我认为您可以通过使用 QPropertyAnimation 为您的小部件的几何属性设置动画来获得所需的内容。 但恕我直言,这是窗口管理器的角色,可以做你想做的事。也许绕过它你会有些头疼(但我可能错了)。

    在更好地阅读了您的问题之后,您似乎想使用自己的组件来触发隐藏/显示,因此 WM 应该不是问题。

    首先,这里是一些动画小部件最小化的代码(假设tbw 是您想要动画的小部件的一个实例):

    formerGeometry = QtCore.QRect(tbw.geometry()) # storing previous geometry in order to be able to restore it later
    
    hideAnimation = QtCore.QPropertyAnimation(tbw, "geometry")
    hideAnimation.setDuration(2000) # chose the value that fits you
    hideAnimation.setStartValue(formerGeometry)
    #computing final geometry
    endTopLeftCorner = QtCore.QPoint(tbw.pos() + QtCore.QPoint(0, tbw.height()))
    finalGeometry = QtCore.QRect(endTopLeftCorner, QtCore.QSize(tbw.width(), 0))
    hideAnimation.setEndValue(finalGeometry)
    
    hideAnimation.start()
    

    【讨论】:

    • 谢谢 :) 1. 示例是用 C 语言编写的,我看不懂,但会尝试一些东西 2. 如果我的动画涉及整个窗口,我可以想象 WM 会处理它。但是由于动画涉及一个子小部件,您认为仍然是这种情况吗?如果是这样,你会如何建议这样做? (注意:目标平台是 Linux)。
    • 太好了,谢谢。我将尝试实现这一点。我已经接受了答案——假设这会很好:)干杯。
    • 好的,它工作得很好——但很费力。不过我作弊了一点:P 为了隐藏下部小部件,我首先将整个窗口移动到桌面行下方,然后关闭下部小部件。这避免了同时应用两种效果:一种改变小部件的大小,另一种相应地移动主窗口。我很惊讶 finalGeometry 是 relative 而不是绝对的。非常感谢:)
    • 你好。如果您不介意,我想我需要更多帮助:|我试图扭转这种情况(下面的按钮和上面的滑动)。为此,我必须制作两个动画:一个降低幻灯片的高度,另一个降低高度并将主窗口沿 y 轴向下移动幻灯片的高度。 Here is the code 这里有两个截屏:1. effect on slide only, 2. effect on both slide and main window.
    • 如您所见:第一个需要窗口向下滑动,第二个没有完全减小幻灯片的大小并打扰按钮的高度。您认为这是布局问题吗?欢迎任何提示(我发现 Qt 上的尺寸布局等非常令人困惑)。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 2011-07-29
    • 2012-02-25
    相关资源
    最近更新 更多