我正在重构一些代码以将GUI与某些状态分离。
#include <StateObject>
Class GUI{
...
StateObject A;
void doSomething() { A->hullaballoo();}
**void ReFreshMyGui() { //take state A and redraw }**
};
多个类共享状态对象以更新状态,但此Gui对象专门用于显示状态。所以我想在修改它时通过StateObject调用Refresh函数。
我不确定信号将如何或是否提供解决方案。任何提示?
答案 0 :(得分:0)
为了分离GUI和数据,您可以使用MVC模式。这意味着您的GUI应该注册到模型的(数据)对象,每当数据发生变化时,GUI都会被通知,它将是重绘自身的GUI。
但是要小心,模型不应该具有具体GUI的概念,而是GUI应该实现包含方法(例如void Update())的观察者接口,该方法将在发生更改时被调用(通知处理程序)。
只需在谷歌上寻找MVC模式。你会发现成千上万的有用的教程。 您还可以考虑MVP和MVVM模式。
示例:强>
class Observer
{
virtual void Update(void* data) = 0;
}
class GUI : public Observer
{
public:
virtual void Update(void* data)
{
//Redraw method and some other things you may
//want to do with the new data
}
}
class Model
{
private:
int m_iData;
List<Observer> observers;
public:
void SetData(int iData)
{
m_iData = iData;
for(int i = 0; i < observers.Length; i++)
{
observers[i].Update(NULL);
}
}
}