Есть ли простой способ получить следующую работу? Я имею в виду, есть ли какой-либо вспомогательный класс в Qt
, который подготавливает строку для qDebug
?
QString s = "value";
qDebug("abc" + s + "def");
Есть ли простой способ получить следующую работу? Я имею в виду, есть ли какой-либо вспомогательный класс в 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()
).
Вариант 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
Согласно документации Qt Core 5.6, вы должны использовать заголовок qUtf8Printable()
from <QtGlobal>
для печати QString
с помощью qDebug
.
Вы должны сделать следующее:
QString s = "some text";
qDebug("%s", qUtf8Printable(s));
или короче:
QString s = "some text";
qDebug(qUtf8Printable(s));
См:
Просто перепишите свой код следующим образом:
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.