Risposte:
Se per stringa intendi std::string
che puoi farlo con questo metodo:
QString QString :: fromStdString (const std :: string & str)
std::string str = "Hello world";
QString qstr = QString::fromStdString(str);
Se per stringa intendi Ascii codificato const char *
, 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 (), devi utilizzare 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 *
codificato 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);
C'è anche un metodo per const ushort *
contenere 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);
Se compilato con compatibilità STL, QString
ha un metodo statico per convertire a std::string
in QString
:
std::string str = "abc";
QString qstr = QString::fromStdString(str);
QString qstr = QString(str.c_str());
? Non sono sicuro se QString
copia ciò che vi è passato.
fromStdString
conserverà questi, costruendo dal .c_str
non. (Ed è stato proprio come fare questo che mi ha portato a questa domanda.)
Modo alternativo:
std::string s = "This is an STL string";
QString qs = QString::fromAscii(s.data(), s.size());
Ciò ha il vantaggio di non utilizzare, il .c_str()
che potrebbe causare la std::string
copia da sola nel caso in cui non ci sia spazio per aggiungere il '\0'
alla fine.
.c_str()
)
std::string s = "Sambuca";
QString q = s.c_str();
Attenzione: questo non funzionerà se std::string
contiene \0
s.
Mi sono imbattuto in questa domanda perché avevo 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 questi 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.
fromLocal8Bit()
Inoltre, per convertire quello che vuoi, puoi usare la classe QVariant.
per 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();
produzione
"hello !"
"10"
"5.42"
5
Intendi una stringa C, come in una char*
stringa, o un std::string
oggetto C ++ ?
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 a std::string
, si ottiene il char*
al buffer e lo si passa al QString
costruttore:
std::string name2("Stack Overflow");
QString qname2(name2.c_str());
QByteArray::QByteArray (const char* data, int size)
prima il wrapper del buffer, quindi passarlo al QString
costruttore.