Qt中的全局变量,如何实现?

7

我正在使用Qt,在main方法中需要声明一个对象,我需要在所有其他文件中使用它。如何在其他文件中访问该对象?(我需要将其设置为全局变量...)

我习惯于iPhone开发,在那里我们有appDelegate,可以在整个应用程序中使用它来访问在applicationDidFinishLaunching方法中声明的对象。我如何在Qt中做到这一点?

3个回答

9

你在.hpp文件中忘记了使用extern关键字 -- 这将导致每次包含hpp文件时都会实例化myGlobalInt - bluebrother

3
在Qt中,有一个名为QApplication的单例类,它具有静态方法QApplication::instance(),可以返回唯一的QApplication对象。它还有许多其他静态成员函数(在早期称为“全局函数”),用于mainwindow、活动窗口等等。
您可以通过子类化它来添加自己的静态方法。 http://doc.trolltech.com/4.5/qapplication.html

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 中一样始终使用全局变量,但我不建议这样做。

1
我使用全局对象的想法是因为该对象将保存我在几乎每个小部件中都需要的数据,并且这些数据是从数据库中获取的。如果我不使用全局对象,那么每次实例化对象时都需要访问数据库。我认为最好只获取一次,这样做是错误的吗? - Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接