Wie String in QString ändern?
Frage
Was ist der einfachste Weg, es zu tun?
Lösung
Wenn durch Zeichenfolge, die Sie bedeuten std::string
Sie es mit dieser Methode können:
QString QString :: fromStdString (const std :: string & str)
std::string str = "Hello world";
QString qstr = QString::fromStdString(str);
Wenn durch Zeichenfolge Ascii codiert const char *
bedeuten, dann können Sie diese Methode verwenden:
QString QString :: fromAscii (const char * str, int size = -1 )
const char* str = "Hello world";
QString qstr = QString::fromAscii(str);
Wenn Sie const char *
mit Systemcodierung codiert, mit dem man lesen kann QTextCodec :: codecForLocale () dann sollten Sie diese Methode verwenden:
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);
Wenn Sie const char *
die UTF8 ist codiert dann werden Sie diese Methode verwenden müssen:
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);
Es gibt auch Verfahren für const ushort *
enthält UTF16 codierte Zeichenfolge:
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);
Andere Tipps
Wenn mit STL-Kompatibilität kompiliert wird, hat QString
eine statische Methode konvertieren ein std::string
zu einem QString
:
std::string str = "abc";
QString qstr = QString::fromStdString(str);
Alternative Art und Weise:
std::string s = "This is an STL string";
QString qs = QString::fromAscii(s.data(), s.size());
Dies hat den Vorteil, nicht .c_str()
verwendet, die die std::string
selbst verursachen könnten, falls kopieren kein Platz ist, um die '\0'
am Ende.
std::string s = "Sambuca";
QString q = s.c_str();
. Achtung: Das wird nicht funktionieren, wenn die std::string
\0
s enthält
ich auf diese Frage kam, weil ich ein Problem hatte, wenn die Antworten folgen, so poste ich meine Lösung hier.
Die obigen Beispiele zeigen alle Proben mit Strings nur ASCII-Werte enthalten, wobei in diesem Fall funktioniert alles einwandfrei. Wenn jedoch mit Strings in Windows Umgang Whcih auch andere Zeichen, wie Deutsch Umlaute enthalten, dann sind diese Lösungen nicht funktionieren
Der einzige Code, korrekte Ergebnisse in solchen Fällen gibt, ist
std::string s = "Übernahme";
QString q = QString::fromLocal8Bit(s.c_str());
Wenn Sie müssen nicht mit einem solchen Strings umgehen, dann sind die oben genannten Antworten wird funktionieren.
Darüber hinaus zu konvertieren, was Sie wollen, können Sie die QVariant Klasse.
Beispiel:
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();
Ausgang
"hello !"
"10"
"5.42"
5
Wollen Sie einen C-String, wie in einem char*
String oder ein C ++ std::string
Objekt?
So oder so, verwenden Sie den gleichen Konstruktor, wie in der QT-Referenz dokumentiert:
Für einen regelmäßigen C-String, sondern nur die Haupt Konstruktor verwenden:
char name[] = "Stack Overflow";
QString qname(name);
Für eine std::string
, können Sie die char*
an den Puffer erhalten und übergeben, daß an den QString
Konstruktor:
std::string name2("Stack Overflow");
QString qname2(name2.c_str());