首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QT5.3中的全局变量

QT5.3中的全局变量
EN

Stack Overflow用户
提问于 2014-05-28 21:39:21
回答 1查看 34.9K关注 0票数 6

在Visual 2012 (C++)中,只要在开始时声明变量,使其具有全局范围,同时设置变量的值,就足够了。如何在QT5.3?中创建全局变量并初始化

我试图在头文件中声明它,但是我遇到了一个问题:“只能在类中初始化静态const积分数据成员”。

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-28 23:44:28

全局变量

要创建一个“全局”变量,您需要让每个人都可以使用它,并且需要声明它一次,而且只声明一次。

globals.h

代码语言:javascript
复制
#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

代码语言:javascript
复制
#include "globals.h"
#include <QString>

// ALL THE GLOBAL DEFINITIONS

qreal g_some_double = 0.5;
QString g_some_string = "Hello Globals";

现在,在您希望访问这些危险的全局变量的任何文件的顶部是:

代码语言:javascript
复制
#include "globals.h"

// ...

// short example of usage

qDebug() << g_some_string << MAGIC_NUM;

g_some_double += 0.1;

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

公共静态成员变量和方法

对于这些类,它们类似于上面的示例,但它们包含在类中。

myclass.h

代码语言:javascript
复制
class MyClass
{
    public:
    static int s_count; // declaration
}

myclass.cpp

代码语言:javascript
复制
int MyClass::s_count = 0; // initial definition

然后,从您的程序的任何部分,您可以放置:

代码语言:javascript
复制
qDebug() << MyClass::s_count;

代码语言:javascript
复制
MyClass::s_count++;// etc

免责声明:

一般来说,全球和公共静态成员都是危险的/不愿意接受的,特别是当你不确定自己在做什么的时候。所有对象和方法的OOP优点以及私有和受保护的东西都会从窗口消失,可读性也会下降。而且可维护性会变得很混乱。请参阅更深入的内容,请在下面回答:

Are global variables bad?

QSettings

对于一些全局设置,我已经成功地使用了QSettings

http://qt-project.org/doc/qt-5/QSettings.html#details

https://stackoverflow.com/a/17554182/999943

希望这能有所帮助。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23922319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档