2014-05-13 4 views
-1

J'ai QT_NO_CAST_FROM_ASCII défini donc je ne peux pas passer d'un char* à un QString. Précédemment j'ai employé: QLatin1String
Mais j'ai juste noté QString::fromStdString, je n'aime pas employer ceci parce que QLatin1String est préféré à QString::fromLatin1.Wrapper pour convertir std :: string en QString?

Quelqu'un connaît-il un objet Qt pour std::string s qui fonctionne comme QLatin1String?

+0

'QLatin1String' est juste un wrapper autour de' const char * 'c-string. Donc je n'ai aucune idée de ce que tu veux. Voulez-vous convertir en 'QString'? Ou faites-vous ce que juste 'QLatin1String'. –

+0

@MarekR 'QLatin1String' est' char * 'car'? '' Est 'std :: string'. Je veux savoir ce que c'est? –

+1

Aucun objet Qt ne correspond à '?'. La méthode officielle pour convertir std :: string en QString est 'QString :: fromStdString()'. Qu'entendez-vous par "QLatin1String" est préféré à "QString :: fromLatin1"? – JKSH

Répondre

1

Pour ceux qui utilisent Qt avec QT_NO_CAST_FROM_ASCII a permis char* s et std::strings ne peut pas être affecté à un QString ou jeté à un QString.

Ce ne sera pas compilé avec QT_NO_CAST_FROM_ASCII activé:

QString foo("Hello World"); 

Vous pouvez faire cela, mais Qt frowns upon it parce qu'il crée, « QString temporaire des objets et faire une copie en profondeur des données de caractère »:

QString foo(QString::fromLatin1("Hello World")); 

A la place, vous devez utiliser:

QString foo(QLatin1String("Hello World")); 

Il est un peu plus frustrant si vous avez besoin d'obtenir un QString d'un std::string parce que vous devez appeler:

QString foo(QLatin1String(helloWorld.c_str())); 

Il y a une conversion directe mais pas avec les emballages recommandés de Qt:

QString foo(QString::fromStdString(helloWorld)); 

C'est-à-dire que je n'ai pas été en mesure de trouver un emballage pour std::string et JKSHasserts that there isn't one. Donc, je crois que dès Qt 5.2 la solution préférée est d'utiliser l'emballage QLatin1String.



(En aparté pour ceux intéressés par un logiciel multilingue, QLatin1String et QString::fromLaint1 les deux attendent le char* d'être en unicode bon de Qt, QString::fromStdString utilise en fait QString::fromUtf8 sous le capot pour convertir en unicode bon.)

Questions connexes