Quelle est la manière la plus simple de le faire?
Si vous std::string
entendez par chaîne, vous pouvez le faire avec cette méthode:
QString QString :: fromStdString (const std :: string & str)
std::string str = "Hello world";
QString qstr = QString::fromStdString(str);
Si par chaîne vous entendez encodé Ascii, const char *
vous pouvez utiliser cette méthode:
QString QString :: fromAscii (const char * str, taille int = -1)
const char* str = "Hello world";
QString qstr = QString::fromAscii(str);
Si vous avez const char *
encodé avec un encodage système qui peut être lu avec QTextCodec :: codecForLocale (), vous devez utiliser cette méthode:
QString QString :: fromLocal8Bit (const char * str, taille int = -1)
const char* str = "zażółć gęślą jaźń"; // latin2 source file and system encoding
QString qstr = QString::fromLocal8Bit(str);
Si vous avez const char *
encodé en UTF8, vous devrez utiliser cette méthode:
QString QString :: fromUtf8 (const char * str, taille int = -1)
const char* str = read_raw("hello.txt"); // assuming hello.txt is UTF8 encoded, and read_raw() reads bytes from file into memory and returns pointer to the first byte as const char*
QString qstr = QString::fromUtf8(str);
Il existe également une méthode pour const ushort *
contenir une chaîne encodée en UTF16:
QString QString :: fromUtf16 (const ushort * unicode, taille int = -1)
const ushort* str = read_raw("hello.txt"); // assuming hello.txt is UTF16 encoded, and read_raw() reads bytes from file into memory and returns pointer to the first byte as const ushort*
QString qstr = QString::fromUtf16(str);
Si compilé avec la compatibilité STL,
QString
a une méthode statique pour convertir astd::string
en aQString
:la source
QString qstr = QString(str.c_str());
? Je ne sais pas siQString
copie ce qui y est passé.fromStdString
les conservera, en construisant à partir de.c_str
ne pas. (Et c'est précisément comment faire cela qui m'a amené à cette question.)Voie alternative:
Cela a l'avantage de ne pas utiliser,
.c_str()
ce qui pourrait entraîner lastd::string
copie du lui-même au cas où il n'y aurait aucun endroit pour ajouter le'\0'
à la fin.la source
.c_str()
)Attention: cela ne fonctionnera pas si le
std::string
contient\0
s.la source
Je suis tombé sur cette question parce que j'avais un problème en suivant les réponses, donc je poste ma solution ici.
Les exemples ci-dessus montrent tous des échantillons avec des chaînes contenant uniquement des valeurs ASCII, auquel cas tout fonctionne correctement. Cependant, lorsque vous traitez avec des chaînes dans Windows, qui peuvent également contenir d'autres caractères, comme des trémas allemands, ces solutions ne fonctionnent pas.
Le seul code qui donne des résultats corrects dans de tels cas est
Si vous n'avez pas à gérer de telles chaînes, les réponses ci-dessus fonctionneront correctement.
la source
fromLocal8Bit()
De plus, pour convertir ce que vous voulez, vous pouvez utiliser la classe QVariant.
par exemple:
production
la source
Voulez-vous dire une chaîne C, comme dans une
char*
chaîne, ou unstd::string
objet C ++ ?Dans tous les cas, vous utilisez le même constructeur, comme indiqué dans la référence QT:
Pour une chaîne C régulière, utilisez simplement le constructeur principal:
Pour a
std::string
, vous obtenez lechar*
dans le tampon et le transmettez auQString
constructeur:la source
QByteArray::QByteArray (const char* data, int size)
pour encapsuler le tampon, puis le transmettre auQString
constructeur.