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