咖啡机

说明如何使用时间线和状态动画化UI中的转换。

咖啡机允许用户选择要冲泡的咖啡类型。他们可以使用滑块确定咖啡、热牛奶和奶泡的比例。冲泡过程的进度以动画的形式显示。当咖啡准备好时,启动屏幕再次出现。

ApplicationFlowForm.ui.qml”文件包含UI中的所有屏幕。我们使用状态显示视图中适当的屏幕,并使用时间线动画化屏幕之间和在屏幕上的转换

应用程序流

在启动屏幕AnimationFlowForm.ui.qml上,用户可以从几种咖啡类型中选择填充空杯子。选择触发CoffeeButton.qml中的animation1animation2

    PropertyAnimation {
        target: glow
        id: animation1
        duration: root.duration
        loops: 1
        from: 1.05
        to: 1.2
        property: "scale"
    }

    ParallelAnimation {
        id: animation2
        SequentialAnimation {
            PropertyAnimation {
                target: glow
                duration: root.duration
                loops: 1
                from: 0.2
                to: 1.0
                property: "opacity"
            }
    ...

选择咖啡类型会触发SideBar.qml中的相应信号处理器,该处理器设置所选咖啡类型的默认混合物。以下代码片段显示《cappuccinoButton.onClicked()`》信号处理器。

    cappuccinoButton.onClicked: {
        sideBar.currentCoffee = qsTr("Cappuccino")
        sideBar.currentFoam = 1
        sideBar.currentMilk = 7
        sideBar.currentCoffeeAmount = 3.5
        sideBar.coffeeSelected()
    }

sideBar.coffeeSelected()信号将ApplicationFlow.qml中的《applicationFlow.state》设置为《"selection"》。我们稍后将指定这些状态。

    choosingCoffee.sideBar.onCoffeeSelected: {
        applicationFlow.state = "selection"
    }

单击“煮一杯”会触发《choosingCoffee.brewButtonSelection.onClicked》信号处理器,该处理器将应用程序流状态更改为《"to settings"》。

    choosingCoffee.brewButtonSelection.onClicked: {
        applicationFlow.state = "to settings"
        applicationFlow.choosingCoffee.milkSlider.value = applicationFlow.choosingCoffee.sideBar.currentMilk
        applicationFlow.choosingCoffee.sugarSlider.value = 2
    }

用户可以使用牛奶和糖的数量滑块来更改默认值。

单击“”会触发《choosingCoffee.brewButton.onClicked()`》信号处理器,该处理器将应用程序流状态设置为《"to empty cup"》。

    choosingCoffee.brewButton.onClicked: {
        applicationFlow.state = "to empty cup"
    }

单击“继续”会触发《emptyCup.continueButton.onClicked》信号处理器,该处理器将应用程序流状态设置为《"to brewing"》。

    emptyCup.continueButton.onClicked: {
        applicationFlow.state = "to brewing"
        brewing.coffeeName = choosingCoffee.sideBar.currentCoffee
        brewing.foamAmount = choosingCoffee.sideBar.currentFoam
        brewing.milkAmount = applicationFlow.choosingCoffee.milkSlider.value
        brewing.coffeeAmount = choosingCoffee.sideBar.currentCoffeeAmount
        brewing.start()
    }

当咖啡准备好时,将触发 brewing.onFinished 信号处理程序。它将应用程序流程状态设置为 "reset",以便应用程序返回到启动屏幕。

使用时间线动画过渡

咖啡机应用程序的屏幕,用于选择咖啡、空杯和煮制每样东西,都使用在单独的 UI 文件 (ui.qml) 中指定的自定义组件。

我们在 ApplicationFlowForm.ui.qml 中使用 时间线 视图来动画化应用程序流程过程中的屏幕之间的转换。

我们的视口包含 200 帧,所以我们选择 "加号按钮" 来向根组件添加一个 1200 帧的时间线。我们为所有其他字段使用默认值。

要开始记录从启动屏幕到咖啡选择屏幕的过渡时间线,我们在 导航器 中选择 choosingCoffee。我们确认播放头位于第 0 帧,然后选择 (自动键 (K)) 按钮(或按 k)。

在第 0 帧,我们在 属性 > 几何形状 - 2D > 位置 中将 X 坐标设置为 0。然后,我们将播放头移动到 400 帧,并将 X 坐标设置为负值。

当我们取消选择记录按钮停止录制时间线时,新时间线将出现在视图中。

有关使用时间线的更多信息,请参阅 创建时间线动画

使用状态在屏幕间移动

我们使用 状态 视图来确定视口的内容。当从一个状态移动到另一个状态时运行动画。

我们在 ApplicationFlowForm.ui.qml 中从视口移动到视口并选择 创建新状态 来创建状态。

我们还为在切换到 "settings""selection" 状态时要运行的动画创建状态。

然后我们返回到 时间线 视图,选择 "时间线设置按钮" 打开 时间线设置 对话框。我们选择 添加 按钮为时间线的一部分创建动画。因此,每个动画的开始和结束帧很重要,而它们的持续时间则不是。

我们将 "selection" 状态的起始帧设置为 400,结束帧设置为 200,因为我们正在回到时间线来显示选择侧边栏。

转换到状态 字段中,我们选择动画结束后要切换到的状态。在对话框的下半部分,我们将没有动画的状态绑定到固定帧。

文件

在某些 Qt 许可证下可用。
了解更多。