我们都知道在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"