方案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;
}
这个看似不起眼的细节修改,优雅地解决了静态场景中,数据局部更新的问题。

本文介绍了一种基于Qt信号槽机制的优雅解决方案,用于处理数据局部更新导致的静态场景问题。通过比较新旧数据并在发生变化时重置状态,确保了流程节点的正确更新。
3万+

被折叠的 条评论
为什么被折叠?



