Comment changer la chaîne en QString?
7 réponses
Si par chaîne vous voulez dire std::string
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 voulez dire ASCII codé const char *
alors vous pouvez utiliser cette méthode:
QString QString:: fromAscii(const char * str, Int size = -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 () alors vous devriez utiliser ceci méthode:
QString QString:: fromLocal8Bit(const char * str, Int size = -1)
const char* str = "zażółć gęślą jaźń"; // latin2 source file and system encoding
QString qstr = QString::fromLocal8Bit(str);
Si vous avez const char *
codé en UTF8, vous devrez utiliser cette méthode:
QString QString:: fromUtf8(const char * str, Int size = -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 *
contenant une chaîne codée UTF16:
QString QString::fromUtf16(const ushort * unicode, int taille = -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 elle est compilée avec la compatibilité STL, QString
a une méthode statique pour convertir un std::string
en QString
:
std::string str = "abc";
QString qstr = QString::fromStdString(str);
Autre manière:
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 amener le std::string
à se copier au cas où il n'y aurait pas de place pour ajouter le '\0'
à la fin.
std::string s = "Sambuca";
QString q = s.c_str();
Avertissement: Cela ne fonctionnera pas si le std::string
contient \0
. s.
Je suis tombé sur cette question parce que j'ai eu 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 bien. Cependant, lorsqu'il s'agit de chaînes dans Windows qui peuvent également contenir d'autres caractères, comme les umlauts 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 à traiter avec de telles chaînes, alors les réponses ci-dessus fonctionneront bien.
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();
Sortie
"hello !"
"10"
"5.42"
5
Voulez-vous dire une chaîne C, comme dans un char*
string, C++ std::string
objet?
De toute façon, vous utilisez le même constructeur, comme documenté 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 un std::string
, vous obtenez char*
pour le tampon et le passer à la QString
constructeur:
std::string name2("Stack Overflow");
QString qname2(name2.c_str());