因为工作的需要,要定义几个QMap的映射,但是因为我不清楚如何定义全局的QMap,所以就在好多个类里面定义了好多重复的QMap。
直到后来,请教同事,才得悉了一种方法,梳理如下。
//header.h文件
extern QMap<int, QString> g_mapTest1;
extern QMap<int, QStirng> g_mapTest2;
//专门用来初始化QMap的类
class MapInit
{
public:
static void InitMap();
};
首先,在一个头文件中使用extern进行声明,注意,这里不能进行定义(不仅仅是extern,其他的变量,除了初始化之外,都不可以在头文件中定义)。
另外创建了一个类,专门用于QMap的初始化,因为这玩意无法在.cpp文件中直接初始化(我没找到这种方法,暂时只能使用这种类的初始化方法代替,等到以后有了更好的解决方案,再更新这篇博客)。
声明结束,就是具体的实现了,代码如下:
//header.cpp文件
/*! 在此处进行定义 */
QMap<int, QString> g_mapTest1;
QMap<int, QStirng> g_mapTest2;
void MapInit::InitMap()
{
g_mapTest1[0] = "测试1_1";
g_mapTest1[1] = "测试1_2";
g_mapTest1[2] = "测试1_3";
g_mapTest2[0] = "测试2_1";
g_mapTest2[1] = "测试2_2";
g_mapTest2[2] = "测试2_3";
}
至此,就实现了全局的初始化工作。
至于调用,也很简单,因为InitMap()函数是静态函数,所以可以直接在主函数中使用
MapInit::InitMap();
即可,这样就完成了全局映射的初始化以及使用工作。