2010-05-11 5 views
0

Je refactoring du code à découpler GUI de un état.comment appeler une fonction pour rafraîchir l'interface graphique

#include <StateObject> 

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

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

objet Etat est partagé par plusieurs classes pour mettre à jour l'état, mais cet objet est spécialisé dans l'affichage Gui l'état. Je voudrais donc appeler la fonction Refresh via stateObject chaque fois que sa modification.

Je ne sais pas comment ou si des signaux fournira la solution. Des indices?

Répondre

0

Afin de découpler l'interface graphique et les données, vous pouvez utiliser le modèle MVC. Cela signifie que votre interface utilisateur graphique doit s'enregistrer dans les objets (données) de votre modèle et à chaque fois que les données changent, l'interface graphique sera notifiée et l'interface utilisateur se redessinera automatiquement. Mais attention, le modèle ne devrait pas avoir la notion d'une interface graphique concrète, l'interface graphique devrait implémenter une interface d'observateur contenant une méthode (par exemple void Update()) qui sera appelée chaque fois que des changements surviennent (gestionnaire de notification).

Recherchez simplement le modèle MVC sur google. Vous trouverez des milliers de tutoriels utiles. Vous pouvez également prendre en compte les modèles MVP et MVVM.

Exemple:

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); 
      } 
     } 
    } 
Questions connexes