c – Qt 5.3中的全局变量
在Visual Studio 2012(C)中,在开头声明变量以使其具有全局范围并同时设置变量的值就足够了.如何在Qt 5.3中创建全局变量并初始化?
我试图在头文件中声明它,但我有一个问题:“只能在类中初始化静态const积分数据成员”. 提前致谢! 解决方法
全局变量
要创建“全局”变量,您需要将其提供给每个人,并且您需要将其声明一次,并且只需要一次. 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 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 免责声明: 一般来说,全局变量和公共静态成员都有点危险/不受欢迎,特别是如果你不确定自己在做什么的话.对象和方法以及私有和受保护类型的所有OOP优点都会消失,可读性也会下降.可维护性可能会变得混乱.请参阅以下更深入??的答案: Are global variables bad? QSettings 对于某些全局设置,我使用QSettings取得了巨大成功. http://qt-project.org/doc/qt-5/QSettings.html#details https://stackoverflow.com/a/17554182/999943 希望有所帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |