最好了解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,因此除非您安装自己的处理程序,否则您仍然会在最后获得换行符。