我正在使用Qt,在main方法中我需要声明一个我需要在所有其他文件中使用的对象。如何在其他文件中访问该对象? (我需要让它全球化。)
我正在使用iPhone开发,我们有appDelegate,您可以在整个应用程序中使用它来访问您在applicationDidFinishLaunching方法中声明的对象。我怎样才能在Qt中做同样的事情?
答案 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 object和Initializing 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中一样使用全局变量,但我不建议这样做。