Quelle est la manière la plus simple de le faire?
Quelle est la manière la plus simple de le faire?
Réponses:
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 a std::string
en a QString
:
std::string str = "abc";
QString qstr = QString::fromStdString(str);
QString qstr = QString(str.c_str());
? Je ne sais pas si QString
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:
std::string s = "This is an STL string";
QString qs = QString::fromAscii(s.data(), s.size());
Cela a l'avantage de ne pas utiliser, .c_str()
ce qui pourrait entraîner la std::string
copie du lui-même au cas où il n'y aurait aucun endroit pour ajouter le '\0'
à la fin.
.c_str()
)
std::string s = "Sambuca";
QString q = s.c_str();
Attention: cela ne fonctionnera pas si le std::string
contient \0
s.
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
std::string s = "Übernahme";
QString q = QString::fromLocal8Bit(s.c_str());
Si vous n'avez pas à gérer de telles chaînes, les réponses ci-dessus fonctionneront correctement.
fromLocal8Bit()
De plus, pour convertir ce que vous voulez, vous pouvez utiliser la classe QVariant.
par exemple:
std::string str("hello !");
qDebug() << QVariant(str.c_str()).toString();
int test = 10;
double titi = 5.42;
qDebug() << QVariant(test).toString();
qDebug() << QVariant(titi).toString();
qDebug() << QVariant(titi).toInt();
production
"hello !"
"10"
"5.42"
5
Voulez-vous dire une chaîne C, comme dans une char*
chaîne, ou un std::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:
char name[] = "Stack Overflow";
QString qname(name);
Pour a std::string
, vous obtenez le char*
dans le tampon et le transmettez au QString
constructeur:
std::string name2("Stack Overflow");
QString qname2(name2.c_str());
QByteArray::QByteArray (const char* data, int size)
pour encapsuler le tampon, puis le transmettre au QString
constructeur.