Qt的qDebug使用小结

 更新时间:2023年06月06日 10:09:29   作者:wowocpp  
使用qDebug()函数它可以把调试信息直接输出到控制台上,本文就来介绍一下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 <QDebug>
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 <QDebug>
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的qDebug使用小结的文章就介绍到这了,更多相关Qt qDebug内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Qt中const QString转换 char *可能的坑

    Qt中const QString转换 char *可能的坑

    本文主要介绍了Qt中const QString转换 char *可能的坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 基于C++实现Socket交互式服务端

    基于C++实现Socket交互式服务端

    在 Windows 操作系统中,原生提供了强大的网络编程支持,允许开发者使用 Socket API 进行网络通信,本文将深入探讨如何通过调用原生网络 API 实现同步远程通信,并介绍了一个交互式 Socket 类的封装,需要的可以参考下
    2024-02-02
  • 基于Matlab制作一个数独求解器

    基于Matlab制作一个数独求解器

    这篇文章主要为大家详细介绍了如何利用Matlab制作一个数独求解器,文中的示例代码讲解详细,对我们学习Matlab有一定帮助,需要的可以参考一下
    2022-05-05
  • 基于OpenGL实现多段Bezier曲线拼接

    基于OpenGL实现多段Bezier曲线拼接

    这篇文章主要为大家详细介绍了基于OpenGL实现多段Bezier曲线拼接,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C语言中数组常用的一些排序算法小结

    C语言中数组常用的一些排序算法小结

    数组的排序方法有很多,效率也各不相同,下面这篇文章主要给大家介绍了关于C语言中数组常用的一些排序算法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • C语言单链表遍历与求和示例解读

    C语言单链表遍历与求和示例解读

    我们在学习编程的过程中,虽然有些语法很简单,但是我们还是要做多题。不做题是发现不了问题的,发现问题我们就可以“对症下药”,进行查漏补缺了。刷题可以先从简单题开始刷,熟练之后再做一些可以提升自己能力的题
    2022-07-07
  • C++之文件输入/输出流类解读

    C++之文件输入/输出流类解读

    这篇文章主要介绍了C++之文件输入/输出流类,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • C++ CryptoPP使用AES实现加解密详解

    C++ CryptoPP使用AES实现加解密详解

    Crypto++ (CryptoPP) 是一个用于密码学和加密的 C++ 库,提供了大量的密码学算法和功能,这篇文章主要为大家介绍了C++ CryptoPP如何使用AES实现加解密,需要的可以参考下
    2023-11-11
  • Opencv图像处理之轮廓外背景颜色改变

    Opencv图像处理之轮廓外背景颜色改变

    这篇文章主要为大家详细介绍了Opencv图像处理之轮廓外背景颜色改变,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • 数据结构串的操作实例详解

    数据结构串的操作实例详解

    这篇文章主要介绍了数据结构串的操作实例详解的相关资料,需要的朋友可以参考下
    2017-07-07

最新评论