Есть ли простой способ получить следующую работу? Я имею в виду, есть ли вспомогательный класс в Qt
который готовит строку для qDebug
?
QString s = "value";
qDebug("abc" + s + "def");
Не очень простой способ, о котором я знаю. Ты можешь сделать:
QByteArray s = "value";
qDebug("abc" + s + "def");
или же
QString s = "value";
qDebug("abc" + s.toLatin1() + "def");
Вы можете использовать следующее:
qDebug().nospace() << "abc" << qPrintable(s) << "def";
nospace()
чтобы избежать распечатки пробелов после каждого аргумента (по умолчанию для qDebug()
).
В соответствии с Документация по Qt Core 5.6 ты должен использовать qUtf8Printable()
от <QtGlobal>
заголовок для печати QString
с qDebug
,
Вы должны сделать следующее:
QString s = "some text";
qDebug("%s", qUtf8Printable(s));
или короче:
QString s = "some text";
qDebug(qUtf8Printable(s));
Увидеть:
Вариант 1: Используйте стандартный режим qDebug для формата C-string и списка переменных-переменных (например, printf):
qDebug("abc%sdef", s.toLatin1().constData());
Вариант 2. Использование версии C ++ с перегруженным << оператор:
#include <QtDebug>
qDebug().nospace() << "abc" << qPrintable(s) << "def";
Ссылка: https://qt-project.org/doc/qt-5-snapshot/qtglobal.html#qDebug
Просто перепишите ваш код следующим образом:
QString s = "value";
qDebug() << "abc" << s << "def";
Я знаю, что этот вопрос немного устарел, но при поиске в Интернете он появляется почти сверху. Можно перегрузить оператор для qDebug (точнее для QDebug), чтобы он принимал std :: strings так:
inline QDebug operator<<(QDebug dbg, const std::string& str)
{
dbg.nospace() << QString::fromStdString(str);
return dbg.space();
}
Эта вещь на протяжении многих лет во всех моих проектах, я почти забываю, что по-прежнему ее нет по умолчанию.
После этого использование << для qDebug () намного удобнее imho. Вы даже можете смешивать QString и std :: string. Некоторая дополнительная (но на самом деле не предназначенная) особенность заключается в том, что вы иногда можете добавить целые числа или другие типы, которые позволяют неявное преобразование в std :: string.