Existe-t-il un moyen facile d'obtenir le travail suivant? Je veux dire, y a-t-il une classe d'assistance dans Qt
qui prépare la chaîne pour qDebug
?
QString s = "value";
qDebug("abc" + s + "def");
Je ne connais aucun moyen très simple. Tu peux faire:
QByteArray s = "value";
qDebug("abc" + s + "def");
ou
QString s = "value";
qDebug("abc" + s.toLatin1() + "def");
Vous pouvez utiliser les éléments suivants:
qDebug().nospace() << "abc" << qPrintable(s) << "def";
La fonction nospace()
évite d'imprimer des espaces après chaque argument (qui est la valeur par défaut pour qDebug()
).
Selon documentation Qt Core 5.6 vous devez utiliser qUtf8Printable()
from <QtGlobal>
en-tête pour imprimer QString
avec qDebug
.
Vous devez procéder comme suit:
QString s = "some text";
qDebug("%s", qUtf8Printable(s));
ou plus court:
QString s = "some text";
qDebug(qUtf8Printable(s));
Voir:
Option 1: utilisez le mode par défaut de qDebug d'un format de chaîne C et d'une liste d'arguments variables (comme printf):
qDebug("abc%sdef", s.toLatin1().constData());
Option 2: utilisez la version C++ avec l'opérateur << surchargé:
#include <QtDebug>
qDebug().nospace() << "abc" << qPrintable(s) << "def";
Référence: https://qt-project.org/doc/qt-5-snapshot/qtglobal.html#qDebug
Réécrivez simplement votre code comme ceci:
QString s = "value";
qDebug() << "abc" << s << "def";
Je sais que cette question est un peu ancienne, mais elle apparaît presque au sommet lors de sa recherche sur le Web. On peut surcharger l'opérateur pour qDebug (plus spécifique pour QDebug) pour lui faire accepter std :: strings comme ceci:
inline QDebug operator<<(QDebug dbg, const std::string& str)
{
dbg.nospace() << QString::fromStdString(str);
return dbg.space();
}
Cette chose est depuis des années dans tous mes projets, j'oublie presque qu'elle n'est toujours pas là par défaut.
Après cela, l'utilisation de << pour qDebug () est beaucoup plus utilisable à mon humble avis. Vous pouvez même mélanger QString et std :: string. Une fonctionnalité supplémentaire (mais pas vraiment prévue) est que vous pouvez parfois ajouter des entiers ou d'autres types qui permettent une conversion implicite en std :: string.