如何有效禁止qDebug的输出?qDebug().nospace()和noquote()的作用是什么?

一、qDebug如何禁用

在.pro文件加入以下语句:

#Release禁止输出qWarning/qDebug信息
CONFIG (release, debug|release) {
DEFINES += QT_NO_WARNING_OUTPUT
DEFINES += QT_NO_DEBUG_OUTPUT
}

但是还不够,需要把工程清理,重新构建才能生效!!

二、qDebug如何使用

qDebug用于在控制台输出调试信息,主要有以下几种用法。

1、类似c++的cout函数

QString str="world";

qDebug()<<"hello "<<str<<"!"<<endl;

注:此处endl起到的作用有两个:

a、等同于\n换行

b、刷新缓冲区,将缓冲区数据写入文件或屏幕,因此会影响程序效率。

endl等价于"/n"+flush();

2、构造函数直接引入参数

  • 字符串拼接

QString str="world!";

qDebug("hello "+str);

  • 类似mfc中CString的format函数

int year=18;

qDebug("今年我%d",year);

  • 注:

%a,%A 读入一个浮点值(仅C99有效)    
%c 读入一个字符    
%d 读入十进制整数    
%i 读入十进制,八进制,十六进制整数    
%o 读入八进制整数    
%x,%X 读入十六进制整数   
%s 读入一个字符串,遇空格、制表符或换行符结束。    
%f,%F,%e,%E,%g,%G 用来输入实数,可以用小数形式或指数形式输入。    
%p 读入一个指针    
%u 读入一个无符号十进制整数   
%n 至此已读入值的等价字符数    
%[] 扫描字符集合    
%% 读%符号
 

3、​nospace()​关闭自动插入空格

qDebug() << "Hello" << "world!";
qDebug().nospace() << "Hello" << "world!";
输出:
Hello world!
Helloworld!

4、noquote()关闭引号字符

qDebug() << QString("Hello world!");  
qDebug().noquote() << QString("Hello world!");
输出:
"Hello world!"
Hello world!

5、如果想向函数传递格式字符串和参数列表,则其工作方式与C语言的printf()函数类似。

qDebug(const char *message, ...)
qDebug("%s", "Hello world!");

6、qDebug的个性化使用

在main函数的入口处,这样写

qSetMessagePattern("%{time yyyy-MM-dd hh:mm:ss}--[%{type}]--%{function}--%{line}:%{message}");

控制台输出:

2022-10-11 14:53:01--[debug]--ConnectionPool::createConnection--132:"QSQLITE" support Transaction

三、qDebug日志重定向

一般就三种处理

1: 输出到日志文件比如txt文本文件。

2: 存储到数据库,可以分类存储,以便相关人员查询分析。

3: 重定向到网络,对方用小工具连接程序后,所有打印信息通过tcp发过去。

https://gitee.com/feiyangqingyun/QWidgetDemo/tree/master/control/savelog

 x、遗留问题

如果是release还需要在pro中加上 DEFINES += QT_MESSAGELOGCONTEXT 才能输出上下文,默认release关闭的。???确定吗???

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值