Qt中的全局变量,如何?

时间:2009-09-24 13:42:08

标签: c++ qt global-variables

我正在使用Qt,在main方法中我需要声明一个我需要在所有其他文件中使用的对象。如何在其他文件中访问该对象? (我需要让它全球化。)

我正在使用iPhone开发,我们有appDelegate,您可以在整个应用程序中使用它来访问您在applicationDidFinishLaunching方法中声明的对象。我怎样才能在Qt中做同样的事情?

3 个答案:

答案 0 :(得分:9)

global_objects.hpp

extern int myGlobalInt;

global_objects.cpp

#include "global_objects.hpp"

namespace
{
    int myGlobalInt;
}

然后#include "global_objects.hpp"在您需要的每个地方myGlobalInt

您还应该阅读C++ singleton vs. global static objectInitializing qt resources embedded in static library

答案 1 :(得分:3)

在Qt中有单例QApplication,其静态方法QApplication :: instance()为您提供了唯一的QApplication对象。 它有许多其他静态成员函数(在较早的时代,它们被称为“全局”),用于主窗口,活动窗口等。

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

如果要添加自己的静态,可以对其进行子类化。

答案 2 :(得分:1)

通常,不应在面向对象编程中使用全局变量。在您的情况下,您可以通过为主类中的变量提供静态访问函数来解决问题。但是,您应该知道,这与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
}

此外,您可以从QApplication派生主应用程序并在其中添加访问函数,通过Qt提供的qApp指针访问主对象。 除此之外,您总是可以像在C中一样使用全局变量,但我不建议这样做。