一、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关闭的。???确定吗???