qDebug重定向(二)

4 篇文章 0 订阅

实现目的

完全仿照qDebug的打印方式,不对原有代码进行修改,如下:

qDebug() << 1 << "str" << 1.11;

避免qInstallMessageHandler可能带来的崩溃问题,文章位置https://blog.csdn.net/qq_34534425/article/details/115703971?spm=1001.2014.3001.5502

直接上代码

#ifdef qDebug
    #undef qDebug
#endif

#ifdef qInfo
    #undef qInfo
#endif

#ifdef qWarning
    #undef qWarning
#endif

用于屏蔽Qt原有定义

class BasePrint
{
public:
    virtual ~BasePrint(){}
    
    template<class T>
    BasePrint &operator<<(const T &t)
    {
        m_osStream << t << " ";
        return *this;
    }

    
    std::ostringstream m_osStream;
};

基类核心代码,用于操作符重载

class qDebug: public BasePrint
{
public:
    ~qDebug()
    {
        DEBUG(m_osStream.str().c_str());
    }
};

子类继承,可实现qInfo,qWarning等日志等级,在析构中统一输出日志。

一个猜测: qDebug() << 1 << "str" << 1.11;,这样的实现方式,qDebug的作用于只在;前,所以可以在析构中实现日志的统一输出,如果有清楚原理的朋友可探讨下。

完整代码链接

目前需要赚积分阶段,希望谅解,代码直接放到项目中可以使用。

把宏定义部分替换为自己的就行

两个版本:

版本一:只有头文件,包含路径就行,不需要添加到项目中

qDebug重定向代码-C++文档类资源-CSDN下载

版本二:有.h和.cpp,可用于项目中实现日志的屏蔽,版本一的改良版

qDebug重写,用于日志打印的重定向-C++文档类资源-CSDN下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值