一、描述
调试流。每当开发人员需要将调试或跟踪信息写入设备、文件、字符串或控制台时,就会使用 QDebug。
1.1、基本用法
在一般情况下,调用
qDebug
() 函数来
获取默认的 QDebug 对象
用于编写调试信息是很有用的。
这将使用接受
QtDebugMsg
的
QtMsgType
枚举值的构造函数构造一个 QDebug 对象。
enum
QtMsgType
:该枚举描述了可以发送到消息处理程序 (
QtMessageHandler
) 的消息。可以使用枚举来识别各种消息类型并将其与适当的操作相关联。
QtDebugMsg
:由
qDebug
() 函数生成的消息。
QtInfoMsg
:由
qInfo
() 函数生成的消息。
QtWarningMsg
:由
qWarning
() 函数生成的消息。
QtCriticalMsg
:由
qCritical
() 函数生成的消息。
QtFatalMsg
:由
qFatal
() 函数生成的消息。
QtSystemMsg
:等同于
QtCriticalMsg
同样,
qWarning
()、
qCritical
() 和
qFatal
() 函数也为相应的消息类型返回 QDebug 对象。
1.2、将自定义类型写入流
要添加对自定义类型的支持,需要
实现一个流操作符
。
二、成员函数
1、
QDebug
(QtMsgType t)
构造一个调试流,写入消息类型 t 的处理程序。
QDebug debug(QtDebugMsg);
debug << "测试1" << "测试2";
QDebug debug2(QtWarningMsg);
debug2 << "测试1" << "测试2";
QDebug
(QString *string)
构造一个写入给定字符串的调试流。
QDebug
(QIODevice *device)
构造一个写入给定设备的调试流。
2、
~QDebug
()
刷新待写入的数据并销毁调试流。
3、void
setAutoInsertSpaces
(bool b)
启用 / 禁用在写入之间自动插入空格。
bool
autoInsertSpaces
()
是否将在写入之间自动插入空格。
QString str1;
QDebug debug(&str1);
debug.setAutoInsertSpaces(true);
debug << "测试1" << "测试2";
qDebug()<<str1;
QString str2;
QDebug debug2(&str2);
debug2.setAutoInsertSpaces(false);
debug2 << "测试1" << "测试2";
qDebug()<<str2;
4、QDebug &
noquote
()
禁止在 QChar、QString 和 QByteArray 内容周围自动插入引号字符并返回对流的引用。
引用时,这些类型将在不带引号字符的情况下打印,并且不会转义不可打印的字符。
QDebug &
quote
()
启用在 QChar、QString 和 QByteArray 内容周围自动插入引号字符并返回对流的引用。
默认情况下启用引用。
QString str{"测试"};
QDebug debug(QtDebugMsg);
debug << str;
debug.quote() << str;
debug.noquote() << str;
5、QDebug &
nospace
()
禁用自动插入空格并返回对流的引用。
QDebug &
space
()
将一个空格字符写入调试流并返回对该流的引用。流会记住设置为将来的写入启用自动插入空格。
QDebug debug(QtDebugMsg);
debug << "测试1" << "测试2" << endl;
debug.space() << "测试1" << "测试2"<< endl;
debug.nospace() << "测试1" << "测试2"<< endl;
6、QDebug &
maybeQuote
(char c = ‘”‘)
根据自动插入引号的当前设置,将字符 c 写入调试流,并返回对流的引用。
7、QDebug &
resetFormat
()
重置流格式选项,使其恢复到其原始构造状态。
8、
[static]
template
<
typename
T> QString
toString
(T &&object)
QMap<int,QString> map;
map[1] = "one";
map[1] = "two";
QJsonObject obj;
obj["one"] = 1;
obj["two"] = 2;
QJsonArray array;
array.append(obj);
qDebug()<< map;
qDebug()<< QDebug::toString(map);
qDebug()<< array;
qDebug()<< QDebug::toString(array);