【QT】单例模式,Q_GLOBAL_STATIC 宏的使用和使用静态成员函数,eg:{简单的日志记录器}

简单的日志记录器为例 。 创建一个Logger类,该类负责记录应用程序的日志消息

使用 Q_GLOBAL_STATIC 宏

解析:Q_GLOBAL_STATIC 是一个 Qt 宏,用于创建全局静态实例。它确保在需要时只创建一次实例,而不管该实例是在哪个线程中创建的。

复制代码
Logger 是要创建的类的名称。
logger 是实例的名称
cpp 复制代码
#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();
}
使用静态成员函数
cpp 复制代码
#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();
}
相关推荐
qq_4017004123 分钟前
Qt Modbus 源码剖析:从 QModbusClient 到工业级通信框架
开发语言·qt·系统架构
星夜离尘5624 分钟前
MATLAB 角度解缠遇到丢样:先分段,再说明圈数为什么不可恢复
开发语言·matlab
我命由我1234533 分钟前
6-2.Python 异常处理 - 异常捕获(捕获指定异常、常见异常类型、异常信息)
java·运维·开发语言·python·http·https·java-ee
ZoeLandia35 分钟前
React08:自定义 Hook
开发语言·前端·react.js·typescript
GreenHandBruce37 分钟前
基于Qt 6.12.0 + FFmpeg 9.0.2的4k视频播放器
qt·ffmpeg·音视频
染指11101 小时前
157.Agent-LangGraph-工具(实现ReAct Agent模式)
开发语言·人工智能·python·langchain·agents
程序猿乐锅1 小时前
【从0-1学习Python | 第九篇】继承
开发语言·后端·python·学习·fastapi
wdfk_prog1 小时前
lwip教程 38:从 `lwipopts.h` 到 Port Contract——lwIP 裁剪、构建选择、OS Port 与 Network Port
java·开发语言
开开心心就好1 小时前
证件照排版打印工具,免费可自定义尺寸
服务器·开发语言·算法·随机森林·pdf·音视频·散列表
我是高手高手高高手1 小时前
宝塔 PHP多版本,切换PHP默认版本
开发语言·php