Qt本身就提供了专门的宏 Q_GLOBAL_STATIC。通过这个宏不但定义简单,还可以获得线程安全性。
1、先看官方文档
https://doc.qt.io/qt-5/qglobalstatic.html
https://doc.qt.io/qt-5/threads-reentrancy.html
2、再看使用方法
Q_GLOBAL_STATIC(Type, VariableName)
Q_GLOBAL_STATIC_WITH_ARGS(Type, VariableName, Arguments)
3、举例说明
rule.h
#ifndef RULE_H #define RULE_H #include <QGlobalStatic> #define RULE Rule::instance() class Rule { public: Rule() {} virtual ~Rule() {} public: static Rule* instance(); public: void test(); }; #endif // RULE_H
rule.cpp
#include "rule.h" Q_GLOBAL_STATIC(Rule, rule) Rule* Rule::instance() { return rule(); } void Rule::test() { //todo }
在任何地方,引用头文件 include "rule.h"
就可以Rule::instance()->test();
或者使用宏RULE->test();
---
参考文献
https://www.cnblogs.com/findumars/p/10392770.html
http://qtdebug.com/qtbook-singleton/
引申阅读
https://doc.qt.io/qt-5/qthreadpool.html Qt线程池
https://doc.qt.io/qt-5/qsharedpointer.html Qt 智能指针
https://doc.qt.io/QtMQTT/index.html Qt Mqtt
https://wiki.qt.io/QtDesignStudio