192 votes

Comment imprimer sur la console en utilisant Qt

J'utilise Qt4 et C++ pour réaliser quelques programmes d'infographie. J'ai besoin de pouvoir imprimer certaines variables dans ma console au moment de l'exécution, pas pour le débogage, mais cout ne semble pas fonctionner, même si j'ajoute les bibliothèques. Existe-t-il un moyen d'y parvenir ?

3 votes

Pouvez-vous préciser que cout ne fonctionne pas, car cela devrait certainement fonctionner. Obtenez-vous une erreur de compilation ? Pouvez-vous montrer un exemple de code de cout qui ne fonctionne pas pour vous ? Expliquez également comment vous exécutez l'application. L'exécutez-vous à partir d'une console ou d'un IDE et ne voyez pas de sortie dans sa fenêtre de sortie ?

0 votes

Juste pour être complet : @ArnoldSpence - sans les bibliothèques, j'obtiens error: ‘cout’ was not declared in this scope ; avec iostream, j'obtiens error: no match for ‘operator<<’ in ‘std::operator<< [with _Traits = std::char_traits<char>](((std::basic_ostream<char>&)(& std::cout)), ... ; l'utilisation des commandes dans la réponse à la place fonctionne bien.

0 votes

Il est difficile de proposer des solutions lorsque l'énoncé du problème est simplement "ça ne marche pas". Veuillez consulter le site editar votre question pour donner une description plus complète de ce que vous attendiez et en quoi cela diffère des résultats réels. Voir Comment demander pour des conseils sur ce qui constitue une bonne explication.

241voto

Goz Points 35007

Si c'est assez bon pour être imprimé sur stderr vous pouvez utiliser les flux suivants, initialement prévus pour le débogage :

#include<QDebug>

//qInfo is qt5.5+ only.
qInfo() << "C++ Style Info Message";
qInfo( "C Style Info Message" );

qDebug() << "C++ Style Debug Message";
qDebug( "C Style Debug Message" );

qWarning() << "C++ Style Warning Message";
qWarning( "C Style Warning Message" );

qCritical() << "C++ Style Critical Error Message";
qCritical( "C Style Critical Error Message" );

// qFatal does not have a C++ style method.
qFatal( "C Style Fatal Error Message" );

Cependant, comme indiqué dans les commentaires, n'oubliez pas que les messages qDebug sont supprimés si QT_NO_DEBUG_OUTPUT est défini

Si vous avez besoin de stdout, vous pouvez essayer quelque chose comme ceci (comme Kyle Strand l'a signalé) :

QTextStream& qStdOut()
{
    static QTextStream ts( stdout );
    return ts;
}

Vous pourriez alors appeler comme suit :

qStdOut() << "std out!";

2 votes

J'ai demandé ,tout en ne déboguant pas, il doit y avoir une fonction qui me permet d'écrire des messages dans la console pendant l'exécution, pas pendant le débogage.

12 votes

Malgré son nom, cette fonction n'est pas liée au débogage avec un débogueur. Il s'agit d'une fonction pratique que Qt fournit pour envoyer une sortie vers stderr et qui peut être supprimée de la compilation avec une définition. Il s'agit donc d'une alternative pour obtenir une sortie sur la console au moment de l'exécution.

0 votes

Merci beaucoup à tous, je l'utilise :). Je suppose que je n'ai plus besoin d'écrire le code que j'ai utilisé. Merci ! C'est super utile.

167voto

CapelliC Points 30055

J'ai trouvé este le plus utile :

#include <QTextStream>

QTextStream out(stdout);
foreach(QString x, strings)
    out << x << endl;

15 votes

Je ne sais pas pourquoi la réponse n'est pas acceptée, mais c'est certainement la plus utile.

5 votes

D'accord. stderr est pour, eh bien, les erreurs (et le débogage). Ceci devrait être la réponse acceptée car c'est la seule qui utilise stdout ET qt.

1 votes

Celui-ci a fonctionné pour moi - et semble être la bonne façon de sortir l'information via cout.

37voto

Kyle Lutz Points 4792

Ajoutez ceci à votre fichier de projet :

CONFIG += console

7 votes

Aucune information n'a été donnée dans la question concernant le système de construction utilisé. Cela n'est pertinent que lorsque l'on utilise qmake .

22voto

Quelles sont les variables que vous voulez imprimer ? Si vous voulez dire QStrings, elles doivent être converties en c-Strings. Essayez :

std::cout << myString.toAscii().data();

9 votes

@CoderaPurpa Vous devez ajouter #include <iostream>

2 votes

myString.toUtf8().data() est meilleur car il imprime les caractères en dehors de la plage ascii. Les caractères chinois par exemple

7voto

Son Vu Points 51

Allez sur le site du projet Properties -> Linker-> System -> SubSystem puis le régler sur Console(/S) .

2 votes

Ceci (comme la réponse de Kyle Lutz) est spécifique au système de construction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X