zoukankan      html  css  js  c++  java
  • qDebug 的使用

    qDebug 的使用

    来源  https://zhuanlan.zhihu.com/p/32637822

    小豆君的干货铺 发布于 2018-01-04

    在项目的开发中,当我们调试程序时,最常用的就是打印信息了,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()类似,这里我就不讲了。

     

    ============= End

     
  • 相关阅读:
    优美的回文串--全国模拟(二)
    创造新世界--全国模拟(二)
    字符串分类--全国模拟(二)
    平衡数--全国模拟(二)
    最小矩形--全国模拟(二)
    组装三角形--全国模拟(二)
    深入.NET内测题
    面向对象七大设计原则
    创建数据库普通临时表和创建数据库全局变量表和俩者的区别
    使用变量 数据类型转换 逻辑控制语句(begin ...end; case...end; if...else; while)
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/12161612.html
Copyright © 2011-2022 走看看