gpt4 book ai didi

qt - 如何在QML转换结束时切换到另一种状态?

转载 作者:行者123 更新时间:2023-12-04 11:38:16 30 4
gpt4 key购买 nike

我正在尝试实现一个健身应用程序,该应用程序显示当前锻炼名称,然后在休息期间显示进度条。当进度条完全填满时,将显示下一个练习的名称,然后在完成时显示进度条,依此类推。

请注意,本示例使用进度条,但在实际应用程序中将拥有自己的小部件。

我的系统有两种状态:

  • 练习进度栏的值为0并保持为0
  • rest 进度条的值从0变为最大值在整个休息期间内

  • 所以它是这样的:
  • 该应用程序处于“运动”状态,并显示当前运动的名称
  • 用户执行练习并在完成后单击进度栏
  • 应用程序切换到“休息”状态
  • 用户在进度条完成时休息
  • 进度条完成后,应用程序切换回“运动”状态,并显示下一个练习的名称

  • 我的问题与第5步有关:我不知道如何在转换结束时切换回另一种状态。我试图在PropertyChanges期间更改“state”属性,并使用SequentialAnimation在过渡结束时对其进行计时,但是我得到了以下错误消息:

    QML StateGroup: Can't apply a state change as part of a state definition.



    这是一些示例代码:
    import QtQuick 2.0
    import QtQuick.Controls 1.1

    ProgressBar {
    id: root

    width: 200
    height: 48

    minimumValue: 0
    maximumValue: 100
    value: 76

    function switchState() {
    if (state == "exercise")
    {
    state = "rest"
    return
    }

    if (state == "rest")
    {
    state = "exercise"
    return
    }
    }

    state: "exercise"

    states: [
    State {
    name: "exercise"
    PropertyChanges {
    target: root
    value: 0
    }
    },
    State {
    name: "rest"
    PropertyChanges {
    target: root
    value: maximumValue

    // error: QML StateGroup: Can't apply a state change as part of a state definition.
    // state: "exercise"
    }
    }
    ]

    transitions: [
    Transition {
    to: "rest"
    PropertyAnimation {
    target: root
    properties: "value"
    duration: 1000
    }
    }
    ]

    MouseArea {
    anchors.fill: parent
    onClicked: parent.switchState()
    }
    }

    如何在状态转换结束时切换到另一个状态?

    最佳答案

    我相信您可以通过使用过渡中的RunningChanged信号来做到这一点:

    transitions: [
    Transition {
    to: "rest"
    PropertyAnimation {
    target: root
    properties: "value"
    duration: 1000
    }

    onRunningChanged: {
    if ((state == "rest") && (!running))
    switchState();
    }
    }
    ]

    QML对象具有用于属性更改的关联信号( on<Property>Changed)。关联的处理程序通常不记录在对象的引用中,但是由于属性的存在而隐式可用。参见 this

    关于qt - 如何在QML转换结束时切换到另一种状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22902769/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com