最好了解QDebug
内部是如何工作的。这样您就可以轻松地对其进行修改以满足您的需求。每当您使用该qDebug()
函数时,它都会返回一个QDebug
对象。默认情况下QDebug
,在任何使用operator <<
.
该类QDebug
内部包含一个QString
. 每次使用时,operator <<
您都会附加到该内部 QString。这个 QString在对象被销毁qt_message_output(QtMsgType, char*)
时打印出来。QDebug
默认情况下qt_message_output
总是打印后跟换行符的字符串。
正常输出
qDebug() << "Var" << 1;
这将输出Var 1
. 这是因为qDebug
将创建一个QDebug
对象,该对象在每次调用operator <<
. 所以这将是Var
+
+ 1 +
。
没有空格
您可以使用QDebug::nospace
来告诉QDebug
不要在每次调用后附加空格operator <<
。
qDebug().nospace() << "Var" << 1;
这将输出Var1
,因为该QDebug
对象不再打印空格。
没有新行
不在\n
字符串末尾添加 有点困难。由于在QDebug
内部仅将字符串传递到qt_message_output
它被销毁时,您可以延迟该 QDebug 对象的销毁 -
QDebug deb = qDebug();
deb << "One" << "Two";
deb << "Three";
这将打印One Two Three
然后追加一个新行。
如果您不想打印新行,则必须更改qt_message_output
. 这可以通过安装自定义处理程序来完成。
void customHandler(QtMsgType type, const char* msg) {
fprintf(stderr, msg);
fflush(stderr);
}
// Somewhere in your program
qInstallMsgHandler(customHandler);
qDebug() << "One" << "Two";
qDebug().noSpace() << "Three" << "Four";
这将打印One Two ThreeFour
.
请注意,这将影响程序中的所有 qDebug 语句。如果要删除自定义处理程序,则应调用qInstallMsgHandler(0)
.
qDebug(const char* msg, ...)
如其他答案所示,您还可以使用该qDebug
函数以类似于printf
. 这样,您可以避免 . 附加的额外空格QDebug
。
但是,qDebug
内部仍然使用qt_message_output
,因此除非您安装自己的处理程序,否则您仍然会在最后获得换行符。