2017-02-27 4 views
0

NOTE: Ceci est une question plutôt naïve à dessein.Comment obtenir une représentation sous forme de chaîne de types Qt5 courants tels que QOpenGLContext?

Pendant le débogage et l'exploitation forestière dans un QT5application C ++, il est utile d'imprimer la valeur des variables internes, et Qt la voie commune est d'utiliser qDebug() avec des amis comme ceci:

qDebug()<<"The value was: "<< myVar; 
// Usually works well even for built-in Qt types 

Cela semble fonctionner pour de nombreux types spécifiques de Qt5 intégrés, et même des pointeurs, mais dans les cas où au lieu de sortir un journal, nous construisons en fait une chaîne, cela devient beaucoup plus encombrant.

QString myString= "The value was: "+myVar; 
// Usually doesn't work well for built-in Qt types 

La question est, ce qui est une bonne façon générale pour obtenir la représentation de chaîne équivalente de types Qt intégré que vous obtiendrez d'eux le streaming à qDebug()?

Ou "quel est l'équivalent de Java toString() pour Qt types"?

+0

Quiconque a voté pour la clôture de cette question, je veux vraiment connaître votre raison! Comment peut-il être perçu comme «basé sur l'opinion»? Quelle opinion est-ce exactement? Merci! –

Répondre

2

De QDebug class documentation je pouvais trouver qu'il a constructeur

QDebug::QDebug(QString *string) 

construit un flux de débogage qui écrit à la chaîne donnée

Donc cela devrait fonctionner:

QString myString; 
QDebug stream(&myString); 
stream <<"The value was: "<< myVar; 
1

Le format et Le contenu de la sortie de débogage Qt ne fait pas partie de l'API. Ils peuvent changer à tout moment. Vous devrez auditer la sortie chaque fois que vous mettez à jour Qt, sinon vous ne devez pas en dépendre autrement que pour le débogage. C'est pourquoi les API rendent intentionnellement lourde la conversion entre la sortie de débogage et les chaînes. Au lieu de cela, implémentez vos propres opérateurs QTextStream pour les types dont vous avez besoin et utilisez le flux pour créer les chaînes.

+0

L'utilité et la commodité de telles conversions ne l'emporteraient-elles pas sur ces préoccupations? Dans le pire des cas, il pourrait être explicitement mentionné dans la documentation que la sortie ne devrait en aucun cas dépendre d'autres fins que le débogage. –

+0

Si vous déboguez, utilisez déjà 'qDebug'. Vous êtes libre de réimplémenter les gestionnaires de messages pour capturer la sortie, par exemple. Connectez-le, etc. Mais vous n'avez pas besoin de traiter les conversions manuelles des chaînes. –