Как вызвать 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
, так что вы все равно получите новую строку в конце, если вы установите свой собственный обработчик.
объединение некоторых из вышеперечисленных ответов вы можете использовать
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.
другой способ-использовать собственный обработчик сообщения.
Надеюсь, это поможет.