在Visual Studio 2012(C++)中,在开头声明变量以使其具有全局范围并同时设置变量的值就足够了.如何在Qt 5.3中创建全局变量并初始化?
我试图在头文件中声明它,但我有一个问题:"只能在类中初始化静态const积分数据成员".
提前致谢!
phy*_*att 13
要创建"全局"变量,您需要将其提供给每个人,并且您需要将其声明一次,并且只需要一次.
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_H
Run Code Online (Sandbox Code Playgroud)
globals.cpp
#include "globals.h"
#include <QString>
// ALL THE GLOBAL DEFINITIONS
qreal g_some_double = 0.5;
QString g_some_string = "Hello Globals";
Run Code Online (Sandbox Code Playgroud)
现在,您希望访问这些危险全局变量的任何文件的顶部是:
#include "globals.h"
// ...
// short example of usage
qDebug() << g_some_string << MAGIC_NUM;
g_some_double += 0.1;
Run Code Online (Sandbox Code Playgroud)
总之,globals.h拥有全局函数和变量的所有原型,然后在中描述它们globals.cpp.
对于这些,它们与上面的示例类似,但它们包含在您的班级中.
myclass.h
class MyClass
{
public:
static int s_count; // declaration
}
Run Code Online (Sandbox Code Playgroud)
myclass.cpp
int MyClass::s_count = 0; // initial definition
Run Code Online (Sandbox Code Playgroud)
然后从程序的任何部分,您可以:
qDebug() << MyClass::s_count;
Run Code Online (Sandbox Code Playgroud)
要么
MyClass::s_count++;// etc
Run Code Online (Sandbox Code Playgroud)
一般来说,全局变量和公共静态成员都有点危险/不受欢迎,特别是如果你不确定自己在做什么的话.对象和方法以及私有和受保护类型的所有OOP优点都会消失,可读性也会下降.可维护性可能会变得混乱.请参阅以下更深入的答案:
对于一些全球性的环境,我已经QSettings取得了巨大的成功.
http://qt-project.org/doc/qt-5/QSettings.html#details
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
24987 次 |
| 最近记录: |