2009-09-24 9 views
6

J'utilise Qt et dans la méthode principale, j'ai besoin de déclarer un objet que j'ai besoin d'utiliser dans tous mes autres fichiers. Comment puis-je accéder à cet objet dans les autres fichiers? (J'ai besoin de le rendre global ..)Variable globale en Qt, comment?

Je suis habitué au développement de l'iPhone et là nous avons l'appDelegate que vous pouvez utiliser partout dans l'application pour atteindre les objets que vous avez déclarés dans la méthode applicationDidFinishLaunching. Comment puis-je faire la même chose dans Qt?

Répondre

8

global_objects.hpp

extern int myGlobalInt; 

global_objects.cpp

#include "global_objects.hpp" 

namespace 
{ 
    int myGlobalInt; 
} 

Et puis #include "global_objects.hpp" dans tous les lieux dont vous avez besoin myGlobalInt. Vous devez également lire C++ singleton vs. global static object et Initializing qt resources embedded in static library.

+0

Vous avez oublié le mot-clé 'extern' dans le fichier .hpp - instancié' myGlobalInt' à chaque fois que le hpp est inclus – bluebrother

+0

@bluebrother Merci, corrigé. –

1

En général, vous ne devez pas utiliser de variables globales dans la programmation orientée objet. Dans votre cas, vous pouvez résoudre le problème en fournissant des fonctions d'accès statiques à la variable de votre classe principale. Vous devez être conscient, cependant, que c'est quelque peu contraire à la POO.

class MainClass 
{ 
    public: 
     static int mySharedValue(void) { return m_mySharedValue; } 
     static void setMySharedValue(int value) { m_mySharedValue = value; } 
    private: 
     static int m_mySharedValue; 
} 

Foo::myOtherClassFunction(void) 
{ 
    // do something 
    int bar = MainClass::mySharedValue(); 
    // do some more 
} 

De plus, vous pouvez obtenir votre application principale de QApplication et ajouter les fonctions d'accès là-bas, l'accès à l'objet principal via le pointeur qApp fourni par Qt. En plus de cela, vous pouvez toujours utiliser une variable globale de la même manière que vous pouvez le faire en C, même si je ne le recommanderais pas.

+1

Mon idée d'utiliser l'objet global était parce que cet objet contiendra des données dont j'ai besoin dans presque chaque widget et que les données sont extraites de la base de données. Si je n'utilise pas d'objet global, j'ai besoin d'accéder à la base de données chaque fois que l'objet est instancié. Je pensais que c'était mieux de l'avoir une fois, est-ce une mauvaise idée? – Martin

2

Dans Qt il y a la QApplication singleton, avec sa méthode statique QApplication :: instance() qui vous donne le seul et unique objet QApplication. Il a beaucoup d'autres fonctions membres statiques (à une époque plus tôt, ils ont été appelés « globals »), pour la fenêtre principale, la fenêtre active, etc.

http://doc.trolltech.com/4.5/qapplication.html

Vous pouvez sublass si vous voulez ajouter votre propre statique.

Questions connexes