Domanda

Qual è il modo più semplice per farlo?

È stato utile?

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 '\ 0' alla fine.

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

"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());
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top