Qt 5.3中的全局变量

Global variables in Qt 5.3

本文关键字:全局变量 Qt      更新时间:2023-10-16

在Visual Studio 2012 (c++)中,在开始时声明变量以使其具有全局作用域,同时设置变量的值就足够了。如何在Qt 5.3中创建全局变量和初始化?

我试图在头文件中声明它,但我有一个问题:"只有静态const整型数据成员可以在类中初始化"。

提前感谢!

全局变量

要创建一个"全局"变量,你需要让它对所有人都可用,并且只声明一次。

上面

#ifndef GLOBALS_H
#define GLOBALS_H
#include <qtglobal.h>
// ALL THE GLOBAL DECLARATIONS
// don't use #include <QString> here, instead do this:
QT_BEGIN_NAMESPACE
class QString;
QT_END_NAMESPACE
// that way you aren't compiling QString into every header file you put this in...
// aka faster build times.
#define MAGIC_NUM 42
extern qreal g_some_double; // Note the important use of extern!
extern QString g_some_string;
#endif // GLOBALS_H

globals.cpp

#include "globals.h"
#include <QString>
// ALL THE GLOBAL DEFINITIONS
qreal g_some_double = 0.5;
QString g_some_string = "Hello Globals";

现在在你想要访问这些危险的全局变量的任何文件的顶部是:

#include "globals.h"
// ...
// short example of usage
qDebug() << g_some_string << MAGIC_NUM;
g_some_double += 0.1;

总之,globals.h有全局函数和变量的所有原型,然后在globals.cpp中进行描述。

公共静态成员变量和方法

对于这些,它们与上面的例子类似,但是它们包含在您的类中。

myclass.h

class MyClass
{
    public:
    static int s_count; // declaration
}

myclass.cpp

int MyClass::s_count = 0; // initial definition

然后你可以在程序的任何部分输入:

qDebug() << MyClass::s_count;

MyClass::s_count++;// etc

免责声明:

一般来说,全局变量和公共静态成员是危险的,尤其是当你不确定自己在做什么的时候。对象和方法以及私有和受保护的所有面向对象的优点都消失了,可读性也下降了。可维护性可能会变得很混乱。下面是更深入的SO答案:

全局变量不好吗?

QSettings

对于一些全局设置,我使用QSettings非常成功。

http://qt-project.org/doc/qt-5/QSettings.html细节https://stackoverflow.com/a/17554182/999943

希望对你有帮助。