如何调用函数来刷新GUI

时间:2010-05-11 10:45:25

标签: c++

我正在重构一些代码以将GUI与某些状态分离。

#include <StateObject>

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

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

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

我不确定信号将如何或是否提供解决方案。任何提示?

1 个答案:

答案 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);
           }
       }
    }