web-dev-qa-db-fra.com

Comment imprimer le littéral de chaîne et QString avec qDebug?

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");
28
Meysam

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");
21
Greenflow

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()).

23
Kurt Pattyn

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:

10
Krzysiek

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

6
bleater

Réécrivez simplement votre code comme ceci:

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

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.

1
JAV