在Visual 2012 (C++)中,只要在开始时声明变量,使其具有全局范围,同时设置变量的值,就足够了。如何在QT5.3?中创建全局变量并初始化
我试图在头文件中声明它,但是我遇到了一个问题:“只能在类中初始化静态const积分数据成员”。
提前感谢!
发布于 2014-05-28 23:44:28
全局变量
要创建一个“全局”变量,您需要让每个人都可以使用它,并且需要声明它一次,而且只声明一次。
globals.h
#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_Hglobals.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免责声明:
一般来说,全球和公共静态成员都是危险的/不愿意接受的,特别是当你不确定自己在做什么的时候。所有对象和方法的OOP优点以及私有和受保护的东西都会从窗口消失,可读性也会下降。而且可维护性会变得很混乱。请参阅更深入的内容,请在下面回答:
QSettings
对于一些全局设置,我已经成功地使用了QSettings。
http://qt-project.org/doc/qt-5/QSettings.html#details
https://stackoverflow.com/a/17554182/999943
希望这能有所帮助。
https://stackoverflow.com/questions/23922319
复制相似问题