Было бы лучше понять, как 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
, поэтому вы все равно получите новую строку в конце, если не установите свой собственный обработчик.