Qt的qDebug使用

Qt的qDebug使用

使用 " qDebug() << "一定要添加头文件 #include

然而

 int num = 20;
 char str[20]="hello world";
 qDebug("如果只写在括号里,是不需要QDebug头文件的 %d %s", num, str);

消除qDebug()打印

qDebug的打印信息,主要是为了方便调试程序时尽快找到bug,所以当我们在发布版本时,需要去掉debug打印,一方面可以加快我们程序的执行速度,另一方面可以减小我们程序的体积。

在我做的项目中有很多人是采用加注释的方法来去掉打印的,虽然这个方法可行,但不是很有效的,如果哪天程序出了bug还需要再把打印信息去掉注释,这是很麻烦的。当然,将日志分级也是个很不错的想法。

为了解决这个问题,你只需要在你的pro文件里加上一行预定义宏即可。

DEFINES += QT_NO_DEBUG_OUTPUT

在你的程序添加上这个宏,重新编译运行程序,看看你的打印信息是不是都不见了呢,哈哈,这是不是很方便啊,Qt就是这么的懂你。

为自定义类添加qDebug()打印

如果我们想要使用qDebug打印自定义类中的信息时就可以像以下这样做:

#include 
class Student
{
public:
    Student(const QString& nm){name = nm;}
    QString getName() const{return name;}
private:
    QString name;
};
QDebug operator<<(QDebug debug, const Student &c)
{
    debug << c.getName();
    return debug;
}
int main(int argc, char *argv[])
{
    Student student("John");
    qDebug() << student;
}

首先,自定义了一个类Student,编写了构造函数和获取姓名的获取器。

其次,定义了"<<"操作符,打印名字。

最后,在main函数中创建Student的实例,并用qDebug()打印该实例。

Qt QDebug 打印自定义结构体

1.简述
你还在到处这样打印结构体么?

qDebug()<<"Mc info:"<<info.m_id<<info.r_id<<info.display_type<<info.topic<<info.name<<info.sname;

我刚才还在这样打印结构体,不过我实在是受够了,一番折腾之后,我可以这样打印了

qDebug()<<"Mc info:"<<info;

2.代码
我们仅需要在结构体里声明一个友元函数,重载QDebug的<<即可。

#include 
class Info
{
public:
    QString m_id;
    QString r_id;
    QString display_type;
    QString topic;
    QString name;
    QString sname;
    
    friend QDebug& operator<<(QDebug out, const Info& info)
    {
        out <<info.m_id<<info.r_id<<info.display_type<<info.topic<<info.name<<info.sname;
        return out;
    }
};

你可能感兴趣的:(qt,qt)