Qt Quick2.3 QML中的坑

本文探讨了QML中速度属性的动态更新方法及其动画效果实现,并深入分析了过渡动画和状态之间的交互逻辑,包括如何在不同状态下平滑地改变元素属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 property int speedT: 0
    property int speedA: HtCarStatus.speed*100
    onSpeedAChanged: {
        speedNumId.stop();
        speedNumId.start();
    }
    SequentialAnimation{
        id:speedNumId;
//        NumberAnimation { target: root; property: "speedT";to:HtCarStatus.speed*100 ;duration: 100; easing.type: Easing.Linear}
        NumberAnimation { target: root; property: "speedT";to:speedA ;duration: 100; easing.type: Easing.Linear}

    }


 transitions: [
        Transition {
            from: ""
            to: "show"
            SequentialAnimation{
//                running: true  //QML SequentialAnimation: setRunning() cannot be used on non-root animation nodes.
                alwaysRunToEnd: true
                ScriptAction{script: lefitBg.visible = false}
                ParallelAnimation{
                    NumberAnimation {target: root;property: "v1";to:-180;duration: 1000;easing.type: Easing.InOutQuad}
                    NumberAnimation {target: root;property: "v2";to:180;duration: 1000;easing.type: Easing.InOutQuad}
                    NumberAnimation {target: root;property: "v3";to:-180;duration: 1000;easing.type: Easing.InOutQuad}
                    NumberAnimation {target: root;property: "v4";to:180;duration: 1000;easing.type: Easing.InOutQuad}
                }
                ScriptAction{script: lefitBg.visible = true}
                ParallelAnimation{
                    SequentialAnimation{
                        NumberAnimation { target: root; property: "iolT";to:1000;duration: 500; easing.type: Easing.InOutQuad}
                        NumberAnimation { target: root; property: "iolT";to:0;duration: 500; easing.type: Easing.InOutQuad}
                    }
                    SequentialAnimation{
                        NumberAnimation { target: root; property: "speedT";to:19000;duration: 500; easing.type: Easing.InOutQuad}
                        NumberAnimation { target: root; property: "speedT";to:0;duration: 500; easing.type: Easing.InOutQuad}
                    }
                }

                ScriptAction{script: {HtCarStatus.activeSerial = true  ;root.speedA = 100;}}

/*这里如果执行了root.speedA = 100;那么

property int speedA: HtCarStatus.speed*100

    onSpeedAChanged: {
        speedNumId.stop();
        speedNumId.start();
    }

speedA就不会响应HtCarStatus.speed*100这个值的变化,这样

onSpeedAChanged: {

        speedNumId.stop();
        speedNumId.start();

    }就不会执行.

如果我们要在实例化对象中使用这个speedA这个变量,就不能在QML中对其赋值

否则控制权就在Javascript中,只能通过Javascript才能改动这个变量值*/

            }
        },
        Transition{
            from: "show"
            to:""
        }

    ]speedA
Qt 6中,使用QML显示M300(一种可能的信号或值)可以借助AxisHelper组件来实现,AxisHelper是Qt Quick中一个用于图表的辅助类,它可以用来在图表中创建和管理坐标轴。以下是一个基本的示例,展示如何在QML中使用AxisHelper来显示M300值: ```qml import QtQuick 2.15 import QtQuick.Window 2.15 import QtCharts 2.3 Window { visible: true width: 640 height: 480 title: "M300 Signal Display" ChartView { anchors.fill: parent ValueAxis { id: valueAxis min: 0 max: 100 labelFormat: "%.2f" } LineSeries { axisX: CategoryAxis { id: categoryAxis; labels: ["A", "B", "C", "D"] } axisY: valueAxis useOpenGL: true // 假设这是M300的值序列 ListModel { id: m300Model ListElement { value: 50.0 } ListElement { value: 60.0 } ListElement { value: 70.0 } ListElement { value: 80.0 } } onModelChanged: { for (var i = 0; i < m300Model.count; i++) { append(m300Model.get(i).value, "M300"); } } } } } ``` 在上述示例中,我们创建了一个ChartView,这是一个图表视图组件,可以用于显示图表。我们定义了两个轴:`ValueAxis`用于Y轴,设置了一个最小值和最大值,以及标签的格式;`CategoryAxis`用于X轴,并指定了标签。`LineSeries`用来绘制M300值的折线图,数据从`ListModel`获取,该模型中包含了M300的值。 请注意,为了简化示例,这里假设M300值是静态定义的。在实际应用中,M300值可能会动态变化,你需要根据实际数据源来更新模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值