QT中多个文件如何设置可共享全局变量
时间: 2024-02-21 08:57:53 浏览: 236
在QT中实现多个文件共享全局变量可以通过以下两种方式:
1. 使用extern关键字
在一个文件中定义全局变量,然后在其他文件中使用extern关键字声明同名变量即可。这样就可以在多个文件中使用同一变量。
例如,在文件A.cpp中定义一个全局变量:
```
int globalVar = 0;
```
然后在文件B.cpp中使用extern关键字声明同名变量:
```
extern int globalVar;
```
这样就可以在文件B.cpp中使用globalVar变量了。
2. 使用全局变量类
QT中提供了一个Q_GLOBAL_STATIC宏,可以方便地实现在多个文件中共享全局变量。该宏可以将一个全局变量包装在一个类中,并且该类的实例只会在第一次使用时被创建。
例如,在头文件Global.h中定义一个全局变量类:
```c++
#ifndef GLOBAL_H
#define GLOBAL_H
#include <QtCore/QObject>
#include <QtCore/QMutex>
class Global : public QObject
{
Q_OBJECT
public:
explicit Global(QObject *parent = nullptr);
int globalVar() const;
void setGlobalVar(int value);
private:
QMutex mutex;
int m_globalVar;
};
Q_GLOBAL_STATIC(Global, globalInstance)
#endif // GLOBAL_H
```
然后在Global.cpp文件中实现该类的方法:
```c++
#include "Global.h"
Global::Global(QObject *parent)
: QObject(parent)
, m_globalVar(0)
{
}
int Global::globalVar() const
{
QMutexLocker locker(&mutex);
return m_globalVar;
}
void Global::setGlobalVar(int value)
{
QMutexLocker locker(&mutex);
m_globalVar = value;
}
```
这样就可以在多个文件中使用该全局变量了:
```c++
#include "Global.h"
void foo()
{
globalInstance->setGlobalVar(42);
}
void bar()
{
int value = globalInstance->globalVar();
}
```
需要注意的是,在使用Q_GLOBAL_STATIC宏时,必须将全局变量类的头文件包含在所有使用该变量的文件中。
阅读全文