Подтвердить что ты не робот

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

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

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

Ответ 1

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

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

или

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

Ответ 2

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

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

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

Ответ 3

Вариант 1: используйте режим qDebug по умолчанию для формата C-строки и списка переменных аргументов (например, printf):

qDebug("abc%sdef", s.toLatin1().constData());

Вариант 2: Используйте версию С++ с перегруженным < < Оператор:

#include <QtDebug>
qDebug().nospace() << "abc" << qPrintable(s) << "def";

Ссылка: https://qt-project.org/doc/qt-5-snapshot/qtglobal.html#qDebug

Ответ 4

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

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

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

или короче:

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

См:

Ответ 5

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

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

Ответ 6

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