Qt QObject类单例模式的写法

本文探讨了C++中使用单例模式创建emit02类实例的方法,通过线程安全的双重检查锁定机制确保唯一实例的生成。同时,深入解析了Qt的信号与槽机制在emit02类中的应用,实现对象间的解耦通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

emit02.h:

#ifndef EMIT02_H
#define EMIT02_H

#include <QObject>

class emit02 : public QObject
{
    Q_OBJECT
public:
//    explicit emit02(QObject *parent = nullptr);
    static emit02* Get_test_emit();
//    emit02 *Get_test_emit01();

private:
    emit02();
    static emit02* m_test_emit;
//    emit02(QObject *parent = nullptr);

signals:
    void ts_single01();

public slots:
    void ts_slot01();

};

void addd(int a, int b);

#endif // EMIT02_H

emit02.cpp:

#include "emit02.h"
#include <QDebug>

#include <QMutex>

emit02 *emit02::m_test_emit = NULL;

emit02 *emit02::Get_test_emit()
{
    qDebug() << "Get_test_emit ";
    if (m_test_emit == NULL) {
        QMutex mutex;  ///加锁为了线程安全
        mutex.lock();
        if (m_test_emit == NULL)
            m_test_emit = new emit02();
        mutex.unlock();
    }

    return m_test_emit;
}

emit02::emit02()
{
//    connect(this,&emit02::ts_single01,this,&emit02::ts_slot01);
//        connect(m_test_emit,SIGNAL(ts_single01()),m_test_emit,SLOT(ts_slot01()));
    qDebug() << "emit02";
    connect(this,SIGNAL(ts_single01()),this,SLOT(ts_slot01()));
}

void emit02::ts_slot01()
{
    qDebug() << "this is ts_slot01 function!";
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值