#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万份处理,太耗资源,导致卡顿现象