2013-09-25 3 views
4

J'ai lu une chaîne à partir d'un fichier XML avec un codage UTF8. Je stocke cette valeur dans un objet QString et concatène avec d'autres informations. Je peux voir dans le débogueur QtCreator que le QString contient la valeur désirée.Comment obtenir const char * à partir de QString

Je dois transmettre cette chaîne à une autre bibliothèque qui prend un argument const char *. Comment puis-je obtenir le const char * s'il vous plaît? J'ai essayé toLocal8bit(), toLatin1(), toUtf8() tous sans chance. Il me semble qu'il me manque quelque chose ...

+0

http://stackoverflow.com/questions/4214369/how-to-convert-qstring-to-stdstring –

+0

@MinLin: ce fil traite de la chaîne std, * pas * const char *. – lpapp

+0

@LaszloPapp Eh bien, dans la réponse, le rvalue est const char *, simplement implicitement converti en lvalue qui est une chaîne std –

Répondre

9

Je dois passer cette chaîne à une autre bibliothèque qui prend un argument const char *. Comment puis-je obtenir le const char * s'il vous plaît? J'ai essayé toLocal8bit(), toLatin1(), toUtf8() tous sans chance. On dirait que je suis manque quelque chose ...

Parce que si vous essayez ceux-ci, vous obtenez seulement un QByteArray retour par opposition à un const char *. Vous pouvez utiliser la méthode constData() sur le QByteArray ainsi vous obtiendrez le résultat souhaité.

Mélanger std :: string et QString n'est pas nécessaire, il est donc préférable de passer par les types qt (QString -> QByteArray -> const char *) sans introduire std :: string ici. Où vous utilisez toLocal8bit(), toLatin1() ou toUtf8() dépend de votre encodage, donc c'est une question différente de celle principale ici. Ils vous renverront tous un QByteArray.

Note: vous devriez éviter d'utiliser toAscii() bien que cela soit obsolète dans Qt 5 pour de bon.

Questions connexes