Как вызвать 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 51

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);

для устранения окружающих кавычек.

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

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

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

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

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

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

inline QDebug & operatorts

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

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