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.)
'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'. –
@MarekR 'QLatin1String' est' char * 'car'? '' Est 'std :: string'. Je veux savoir ce que c'est? –
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