Как вызвать qDebug без добавленных пробелов и новой строки?

я использую функцию печати C++/Qt qDebug, но иногда я хотел бы контролировать, как", пространство и новая строка добавляется и не использовать qDebug по умолчанию.

возьмем простой пример:

QString var1("some string");
int var2 = 1;
qDebug() << var1 << "=" << var2;

выводит

"some string" = 1 

но предположим, что мне не нравится добавленное " и пространство и хотел бы, чтобы печать выглядела как

some string=1 

как мне тогда позвонить qDebug?


Примечание: функция в qDebug называется nospace, но он удалит пробелы. Но "все еще там".

если я использую это:

qDebug().nospace() << var1 << "=" << var2;

Я:

"some string"=1

но обратите внимание, что я до сих пор не нашел способ, чтобы избавиться от конца новой строки.

/спасибо

7 ответов


попробовать такой формат: qDebug("%s=%d", "string", 1); В этом случае qDebug использует printf форматирование

С. П. адаптированных для вашего примера: qDebug("%s=%d", var1.toStdString().c_str(), var2);


было бы лучше понять, как QDebug работает внутри. Таким образом, вы можете легко изменить его в соответствии с вашими потребностями. Всякий раз, когда вы используете qDebug() функция, она возвращает , qDebug внутренне все еще использует qt_message_output, так что вы все равно получите новую строку в конце, если вы установите свой собственный обработчик.


С Qt 5.4 вы также можете написать:

qDebug().nospace().noquote() << var1;

объединение некоторых из вышеперечисленных ответов вы можете использовать

qDebug() << qPrintable(var1);

чтобы исключить кавычки.


Я также испытал проблему котировок. Решение состоит в том, чтобы не pipe QString() в поток, но вместо QString(...).toStdString().c_str().

Я построил себе небольшой удобный макрос, чтобы легко обойти это:

#define Q(string) (string).toStdString().c_str()

теперь каждый раз, когда вы используете QString, сделайте это так:

qDebug() << Q(var1) << "=" << var2;

файл $(QTDIR)/src/corelib/io / qdebug.h содержит почти все определения методов вывода отладки. Один из них:--1-->

встроенные QDebug &операторц

таким образом, нет" официального " способа подавления котировок, но вы можете, конечно, изменить qdebug.h или используйте собственную копию или измененную и переименованную копию класса QDebug.


другой способ-использовать собственный обработчик сообщения.
Надеюсь, это поможет.