淘先锋技术网

首页 1 2 3 4 5 6 7

 

我们都知道在QT应用程序中,打印结果可以使用qDebug() << “value1” << “value2”

那么这究竟是怎么实现的呢?

 

我们可以在qlogging.h中查看qDebug的定义:

#define qDebug QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).debug

可以看到qDebug是一个宏定义。那么qDebug() 就是相当于:

QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).debug()

那么 QMessageLogger 就是声明一个临时对象,对于一个临时对象调用debug(), 也就是在QMessageLogger中有一个debug()的方法, 来返回一个临时另一个类的对象作为临时变量B。对于类B,应该实现连续的 “<<” 输出。然后在 类B的析构函数中,将传入的变量打印出来。

 

我们来实现一个我们自己的xDebug() << "value1"  << "value2"

我们应该定义两个类 Test1, Test2来模拟一下:

class Test1
{
public:
    Test1() {}
    Test2 test2 () {
        return Test2();
    }
};
class Test2
{
public:

    Test2();
    ~Test2() {
        //进行数据打印(处理)
        printf();
    }

    Test2& operator << (const QVariant value) {
        m_data.append(value);

        return *this;
    }

private:
    QList<QVariant> m_data;     //日志数据列表

};

最终我们使用xDebug 来定义一个宏:.

#define xDebug MessageLogger().test2

我们使用的时候 xDebug() << "value1" << " value2"