Come cambiare la stringa in QString?
Domanda
Qual è il modo più semplice per farlo?
Soluzione
Se per stringa intendi std :: string
puoi farlo con questo metodo:
QString QString :: fromStdString (const std :: string & amp; str)
std::string str = "Hello world";
QString qstr = QString::fromStdString(str);
Se per stringa intendi const char *
codificato Ascii, puoi utilizzare questo metodo:
QString QString :: fromAscii (const char * str, int size = -1 )
const char* str = "Hello world";
QString qstr = QString::fromAscii(str);
Se hai const char *
codificato con la codifica di sistema che può essere letta con QTextCodec :: codecForLocale () allora dovresti usare questo metodo:
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);
Se hai const char *
con codifica UTF8, dovrai usare questo metodo:
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);
Esiste anche un metodo per const ushort *
contenente una stringa codificata UTF16:
QString QString :: fromUtf16 (const ushort * unicode, int size = -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);
Altri suggerimenti
Se compilato con compatibilità STL, QString
ha un metodo statico per convertire un std :: string
in un QString
:
std::string str = "abc";
QString qstr = QString::fromStdString(str);
Modo alternativo:
std::string s = "This is an STL string";
QString qs = QString::fromAscii(s.data(), s.size());
Questo ha il vantaggio di non usare .c_str ()
che potrebbe causare la copia di std :: string
nel caso in cui non ci sia spazio per aggiungere il
std::string s = "Sambuca";
QString q = s.c_str();
Avviso: non funzionerà se std :: string
contiene \ 0
s.
Mi sono imbattuto in questa domanda perché ho avuto un problema nel seguire le risposte, quindi inserisco la mia soluzione qui.
Gli esempi sopra mostrano tutti i campioni con stringhe contenenti solo valori ASCII, nel qual caso tutto funziona bene. Tuttavia, quando si ha a che fare con stringhe in Windows che possono contenere anche altri caratteri, come le umlaut tedesche, queste soluzioni non funzionano
L'unico codice che fornisce risultati corretti in tali casi è
std::string s = "Übernahme";
QString q = QString::fromLocal8Bit(s.c_str());
Se non hai a che fare con tali stringhe, le risposte sopra funzioneranno bene.
Inoltre, per convertire quello che vuoi, puoi usare la classe QVariant.
ad esempio:
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();
uscita ??p>
"hello !"
"10"
"5.42"
5
Intendi una stringa C, come in una stringa char *
o un oggetto C ++ std :: string
?
Ad ogni modo, usi lo stesso costruttore, come documentato nel riferimento QT:
Per una normale stringa C, basta usare il costruttore principale:
char name[] = "Stack Overflow";
QString qname(name);
Per un std :: string
, ottieni il char *
al buffer e lo passi al costruttore QString
:
std::string name2("Stack Overflow");
QString qname2(name2.c_str());