Frage

Was ist der einfachste Weg, es zu tun?

War es hilfreich?

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.

hinzufügen
std::string s = "Sambuca";
QString q = s.c_str();

. Achtung: Das wird nicht funktionieren, wenn die std::string \0s 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());
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top