2010-05-11 16 views
0

我正在重构一些代码以将GUI从某种状态中分离出来。如何调用一个函数来刷新GUI

#include <StateObject> 

Class GUI{ 
... 
StateObject A; 
void doSomething() { A->hullaballoo();} 

**void ReFreshMyGui() { //take state A and redraw }** 
}; 

状态对象被多个类共享来更新状态,但是这个Gui对象专门显示状态。所以我想通过StateObject在修改时调用Refresh函数。

我不知道如何或如果信号将提供解决方案。任何提示?

回答

0

为了分离GUI和数据,你可以使用MVC模式。这意味着您的GUI应该注册到您的模型的(数据)对象,并且每当数据发生变化时,GUI都将被通知,并且它将成为GUI自我重绘。但是请注意,模型不应该具有具体GUI的概念,而应该实现一个包含方法的观察者接口(例如void Update()),每当发生更改(通知处理程序)时将调用该方法。

只需在Google上查找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); 
      } 
     } 
    } 
相关问题