Как напечатать строковый литерал и QString с помощью qDebug?

Есть ли простой способ получить следующую работу? Я имею в виду, есть ли вспомогательный класс в Qt который готовит строку для qDebug?

QString s = "value";
qDebug("abc" + s + "def");

25

Решение

Не очень простой способ, о котором я знаю. Ты можешь сделать:

QByteArray s = "value";
qDebug("abc" + s + "def");

или же

QString s = "value";
qDebug("abc" + s.toLatin1() + "def");
18

Другие решения

Вы можете использовать следующее:

qDebug().nospace() << "abc" << qPrintable(s) << "def";

nospace() чтобы избежать распечатки пробелов после каждого аргумента (по умолчанию для qDebug()).

21

В соответствии с Документация по Qt Core 5.6 ты должен использовать qUtf8Printable() от <QtGlobal> заголовок для печати QString с qDebug,

Вы должны сделать следующее:

QString s = "some text";
qDebug("%s", qUtf8Printable(s));

или короче:

QString s = "some text";
qDebug(qUtf8Printable(s));

Увидеть:

9

Вариант 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

6

Просто перепишите ваш код следующим образом:

QString s = "value";
qDebug() << "abc" << s << "def";
3

Я знаю, что этот вопрос немного устарел, но при поиске в Интернете он появляется почти сверху. Можно перегрузить оператор для 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.

0
По вопросам рекламы [email protected]