2009-09-24 33 views
6

Estoy usando Qt y en el método principal necesito declarar un objeto que necesito usar en todos mis otros archivos. ¿Cómo puedo acceder a ese objeto en los otros archivos? (Necesito hacerlo global ...)Variable global en Qt, ¿cómo?

Estoy acostumbrado al desarrollo de iPhone y allí tenemos la aplicaciónDelegate que puede usar en toda la aplicación para llegar a los objetos que ha declarado en el método applicationDidFinishLaunching. ¿Cómo puedo hacer lo mismo en Qt?

Respuesta

8

global_objects.hpp

extern int myGlobalInt; 

global_objects.cpp

#include "global_objects.hpp" 

namespace 
{ 
    int myGlobalInt; 
} 

Y luego #include "global_objects.hpp" en cada lugar que necesita myGlobalInt.

Debe leer C++ singleton vs. global static object y Initializing qt resources embedded in static library también.

+0

Olvidó la palabra clave 'extern' en el archivo .hpp - esto instanciará' myGlobalInt' cada vez que se incluya el hpp – bluebrother

+0

@bluebrother Gracias, corregido. –

1

En general, no debe usar variables globales en la programación orientada a objetos. En su caso, puede resolver el problema proporcionando funciones de acceso estático a la variable en su clase principal. Sin embargo, debe tener en cuenta que esto es algo contrario a OOP.

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 
} 

Por otra parte, se puede concluir cuál es su principal aplicación de QApplication y añadir las funciones de acceso allí, acceder al objeto principal a través del puntero qApp proporcionada por Qt. Además de eso, siempre puede usar una variable global de la misma manera que puede hacerlo en C, aunque no lo recomendaría.

+1

Mi idea para usar el objeto global fue porque este objeto contendrá los datos que necesito en casi cada widget y esos datos se obtienen de la base de datos. Si no uso un objeto global, necesito acceder a la base de datos cada vez que se instancia el objeto. Pensé que era mejor obtenerlo una vez, ¿esa es la idea equivocada? – Martin

2

En Qt está la QApplication singleton, con su método estático QApplication :: instance() que le devuelve el único objeto QApplication. Tiene muchas otras funciones miembro estáticas (en una edad más temprana que fueron llamados "globales"), para la MainWindow, la ventana activa, etc.

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

Puede sublass si quieres añadir su estática