每个Qter都该知道的qDebug

作者 : 开心源码 本文共1803个字,预计阅读时间需要5分钟 发布时间: 2022-05-12 共223人阅读

在项目的开发中,当我们调试程序时,最常用的就是打印相关信息了,在Qt中为我们提供了非常方便的打印信息类QDebug。

可能,大家已经使用QDebug很熟练了,但也许有些地方是并没有注意到,下面小豆君就为大家详情一下QDebug的少量常用特性。

1 qDebug()的最常用法

我们可以使用qDebug像使用std::cout一样,直接在重定向操作符(<<)后面加上我们的字符串就可。

如:

qDebug() << "Hello" << 123;

qDebug()还可以打印Qt中的基本类型,例如QString,QByteArray,QDate,QRectF,QVariantHash,QFont等等,关于Qt中的基本类型,大家可以在帮助文档中搜索关键字QMetaType,这里就不列了。

这也是大家所熟习的。

如:

qDebug() << QString("Hello") << QPoint(10, 10);

以上的用法都必需包含头文件QDebug

#include <QDebug>

2 不包含头文件,直接使用qDebug()

一般的,每次我们使用qDebug()<<时,都会要求包含头文件QDebug。假如你是用习惯了C语言中的格式化输出,那么你也可以像下面的做法来输出打印信息。

#include <QObject>int main(int argc, char *argv[]){    int num = 20;    char str[20]="hello world";    qDebug("假如只写在括号里,是不需要QDebug头文件的 %d %s", num, str);}

实际qDebug是包含在qlongging.h中的,由于我们的Qt程序,一般都会包含QObject,所以这里的头文件包含了QObject,从而我们就不必要额外的再增加QDebug头文件了。

以上对于只打印字符串等少量临时性的基本类型信息时,使用这种方法是非常有效的,但是,要记住Qt所支持的基本类型是不可以打印的。

3 为自己设置类增加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()打印该实例。

4 消除qDebug()打印

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

在我做的项目中有很多人是采用加注释的方法来去掉打印的,尽管这个方法可行,但不是很有效的,假如哪天程序出了bug还需要再把打印信息去掉注释,这是很麻烦的。

为理解决这个问题,你只要要在你的pro文件里加上一行预约义宏就可。

DEFINES += QT_NO_DEBUG_OUTPUT

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

关于qDebug的知识点小豆君就先讲到这里吧,熟练掌握以上的知识在我们的项目开发中基本上是够用了。有兴趣的同学,还可以查看qWarning() qCritical() qFatal()这些函数,大概够和qDebug()相似,这里我就不讲了。

关于Qt中的调试问题,随着我们以后深入的学习,小豆君还会详情Qt的新断言机制,智能指针检测识别机制,Creator调试器用法等。

最后也希望大家多多支持小豆君的创作,关注小豆君的公众号“小豆君Qt分享”,最新文章都会在公众号第一时间发布,或者者你有不懂的问题,关注公众号后,可加好友或者进Qt群取得答案。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 每个Qter都该知道的qDebug

发表回复