IMMComposer的静态场景更新问题

来源:互联网 发布:简易编程软件 编辑:程序博客网 时间:2024/06/15 21:38


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

原创粉丝点击