C++实现弹簧效果来解决qml内部弹簧效果卡顿现象


#define AnimationDealEmit(name, from, to, ms, isFirst) \

    do{    \
    if(!isFirst) {    \
    m_##name += (to - from) / (9 * ms / 25);    \
    } else {    \
    m_##name = from;    \
    }    \
    if(((to - from) > 0) ? m_##name < to : m_##name > to) {    \
    emit name##Changed(m_##name);    \
    name##Timer->start(ms / (9 * ms / 25));    \
    } else {    \
    m_##name = to;    \
    emit name##Changed(m_##name);    \
    name##Timer->stop();    \
    }    \

    }while(0)


 if(m_rpm != data.rpm){
        m_rpm = data.rpm;
        if(m_rpm>300)
       {     m_selfcheck=false;
            emit selfcheckChanged(m_selfcheck);}
        if(m_active==false)
            m_rpm=0;
        m_rpmAngleFrom = m_rpmAngle;
        if(m_rpm >= 8000)
            m_rpmAngleTo = 108.5;
        else
            m_rpmAngleTo = -179.0+287.5/8000.0*m_rpm;
        if(m_active){AnimationDealEmit(rpmAngle, m_rpmAngleFrom, m_rpmAngleTo, 500, true);}
        emit rpmChanged(m_rpm);
    }


void CarStatus::rpmAngletimeout(){
    AnimationDealEmit(rpmAngle,m_rpmAngleFrom,m_rpmAngleTo,300,false);
}


因为如果定义float real类型变量,qml内部弹簧机智将变量分的特别细,0---1000,可能就分成100万份处理,太耗资源,导致卡顿现象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值