简单的日志记录器为例 。 创建一个Logger类,该类负责记录应用程序的日志消息
使用 Q_GLOBAL_STATIC 宏
解析:Q_GLOBAL_STATIC 是一个 Qt 宏,用于创建全局静态实例。它确保在需要时只创建一次实例,而不管该实例是在哪个线程中创建的。
Logger 是要创建的类的名称。
logger 是实例的名称
#include <QCoreApplication>
#include <QMutex>
#include <QDebug>class Logger
{
public:static Logger *instance(){if (!m_instance){QMutexLocker locker(&m_mutex);if (!m_instance)m_instance = new Logger;}return m_instance;}void log(const QString &message){qDebug() << "Log:" << message;}private:Logger() {}~Logger() {}Logger(const Logger &) = delete;Logger &operator=(const Logger &) = delete;static Logger *m_instance;static QMutex m_mutex;
};Q_GLOBAL_STATIC(Logger, logger)int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 使用单例记录日志Logger::instance()->log("Application started");return a.exec();
}
使用静态成员函数
#include <QCoreApplication>
#include <QDebug>class Logger
{
public:static Logger &instance(){static Logger m_instance;return m_instance;}void log(const QString &message){qDebug() << "Log:" << message;}private:Logger() {}~Logger() {}
//禁止对 Logger 类进行拷贝构造和赋值操作Logger(const Logger &) = delete;//禁止通过赋值方式创建新的实例Logger &operator=(const Logger &) = delete;// 禁止通过赋值方式创建新的实例
};int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 使用单例记录日志Logger::instance().log("Application started");return a.exec();
}