Qt 5.3中的全局变量
Global variables in Qt 5.3
在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
希望对你有帮助。
相关文章:
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 内联函数中具有内部链接的全局变量
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局变量 多读取器 一个写入器多线程安全?
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 不同作用域中的静态变量和全局变量
- C++ 在编译时具有函数计算全局变量
- 修改程序的入口点时未调用全局变量的构造函数
- 使用 std::ios_base::Init 正确初始化全局变量
- 为什么我的全局变量似乎没有变化?
- C ++程序如何返回我的数组或写入全局变量
- QT C++中对全局变量的未定义引用
- Qt C++创建一个所有类都可以访问的全局变量
- GUI QT全局变量错误
- QT良好的全局变量/对象处理
- Qt没有用于使用全局变量调用的匹配函数
- Qt 5.3中的全局变量
- 在Qt插件中使用全局变量的主程序