IMMComposer的静态场景更新问题


方案1:尝试使用Qt的信号槽机制:当控件数据变化时发出信号,与该信号连接的槽函数将Process的状态重置!有点绕~

方案2:在Process内部保留一个数据拷贝,当最新数据和拷贝数据不一致时,将Process的状态重置,该Process所有后继结点更新。

void setData(const flowType& v){ *d_ptr = v; }	
改成

void setData(const flowType& v)
{					
	if (*d_ptr != v)
	 {
		 reset(); 
	}	
	*d_ptr = v; 
}	

Provider派生类的d_ptr为数据缓存,存储控件的数据。当数据变化时即*d_ptr != v时,将该结点的launched标志量置为false,迫使该结点的所有后继结点更新。对于int, string等上述setData满足,但是float和double需要特化:

void setData(const float& v)
{
	if ( abs(*d_ptr - v)>1.0 ) 
		reset(); 
	*d_ptr = v; 
}
这个看似不起眼的细节修改,优雅地解决了静态场景中,数据局部更新的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值