Qt提供了宏 Q_GLOBAL_STATIC(官方说明文档:https://doc.qt.io/qt-5/qglobalstatic.html ), 用于创建全局静态对象。鉴于此,我们可以通过这个宏就能轻松实现单例(且线程安全)。举例说明:我们希望存储全局变量或者参数,且只能通过一个地方(必须为单例模式)就能设置或者访问,那么就可以设计一个AppData类,专门用于存储全局变量,实现代码如下:
示例代码
#include <QCoreApplication>
#include <QVariant>
#include <QDebug>
class AppData
{
public:
static AppData *Instance();
void SetValue(QString key, QVariant var)
{
if (m_keyValues.contains(key)) {
m_keyValues[key] = var;
}
else {
m_keyValues.insert(key, var);
}
}
QVariant GetValue(QString key)
{
if (m_keyValues.contains(key)) {
return m_keyValues.value(key);
}
return QVariant();
}
protected:
explicit AppData(void){};
virtual ~AppData(void){};
private:
QVariantMap m_keyValues;
};
#if 0
Q_GLOBAL_STATIC(AppData, getInstance)
#else
class AppDataProvider : public AppData {};
Q_GLOBAL_STATIC(AppDataProvider, getInstance)
#endif
AppData *AppData::Instance()
{
return getInstance;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
AppData::Instance()->SetValue("1", "1-first");
AppData::Instance()->SetValue("2", "2-second");
AppData::Instance()->SetValue("3", "3-third");
AppData::Instance()->SetValue("1int", 1);
AppData::Instance()->SetValue("2int", 2);
AppData::Instance()->SetValue("3int", 3);
qDebug() << AppData::Instance()->GetValue("1").toString();
qDebug() << AppData::Instance()->GetValue("2").toString();
qDebug() << AppData::Instance()->GetValue("3").toString();
qDebug() << AppData::Instance()->GetValue("1int").toInt();
qDebug() << AppData::Instance()->GetValue("2int").toInt();
qDebug() << AppData::Instance()->GetValue("3int").toInt();
return a.exec();
}
输出结果
"1-first"
"2-second"
"3-third"
1
2
3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)