美文网首页PyQt程序员
每个Qter都该知道的qDebug

每个Qter都该知道的qDebug

作者: 223480235e8e | 来源:发表于2019-01-09 21:56 被阅读24次

在项目的开发中,当我们调试程序时,最常用的就是打印相关信息了,在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群获得答案。

相关文章

  • 每个Qter都该知道的qDebug

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

  • Qt的调试打印

    qt的调试方法: 使用函数qDebug在控制台上打印日志。 #define cout qDebug()使用中可以直...

  • 每个孩子都该知道的地球通史

    每个孩子都该知道的地球通史 ——读《墙书·地球通史》(730字) 作者:苇眉儿 墙书,是一种新形式的书。顾名思义,...

  • 每个有手机的人都该知道的秘密

    看手机、玩手机,几乎成为现代人每天的必修课。购物、游戏、小视频、电影、段子、QQ、微信……. 各种五花八门、无所不...

  • 每个人都该知道的成事之本

    古语有言“做事先做人,做人先立德,做事靠人,做人靠德”。此言可见德为立人成事之本。 那此处的“德”又是什么呢? 德...

  • 每个人都该知道的赞美公式

    你会赞美别人吗?会不会想夸别人几句,却觉着夸的生硬,自己听着都不舒服,有时候发挥不好还会得罪人呢? 其实赞美别人确...

  • 每个人都该知道的相亲真相

    成年男女,当到了一定的年纪还是单身,往往都绕不开一个词,那就是相亲。 或是自己也很想要赶紧结婚,想要通过相亲,能够...

  • 爱情中,每个女人都该知道的真相

    女人,总是容易为情所困。 甚至说,对爱情的各种疑惑,从来都不仅仅只是存在于年轻的时候,而是会贯穿一生。 像是对方到...

  • qDebug输出QString

    在使用qDebug输出QString,直接输出会有问题,正确的方法如下: QString a = “Hello W...

  • 每个女孩都知道

    每个女孩都知道:深夜回家,起码要回头七八次确认有没有尾随者。 每个女孩都知道:如果一个陌生男人先进电梯,自己最好再...

网友评论

    本文标题:每个Qter都该知道的qDebug

    本文链接:https://www.haomeiwen.com/subject/ahdnpftx.html