Was ist der einfachste Weg, dies zu tun?
Wenn Sie mit Zeichenfolge meinen std::string
, können Sie dies mit dieser Methode tun:
QString QString :: fromStdString (const std :: string & str)
std::string str = "Hello world";
QString qstr = QString::fromStdString(str);
Wenn Sie mit Zeichenfolge Ascii-codiert meinen, const char *
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 einer Systemcodierung codiert haben, die mit QTextCodec :: codecForLocale () gelesen werden kann, 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 *
UTF8-codiert haben , müssen Sie diese Methode verwenden:
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 eine Methode zum const ushort *
Enthalten von UTF16-codierten Zeichenfolgen:
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);
Wenn mit STL-Kompatibilität kompiliert,
QString
verfügt eine statische Methode zum Konvertieren von astd::string
in aQString
:quelle
QString qstr = QString(str.c_str());
? Nicht sicher, obQString
kopiert wird, was darin übergeben wurde.fromStdString
wird diese bewahren, aus.c_str
nicht konstruieren . (Und genau das hat mich zu dieser Frage geführt.)Alternativer Weg:
Dies hat den Vorteil, dass
.c_str()
das Gerät nicht verwendet wird, was dazu führen kannstd::string
, dass es sich selbst kopiert, falls'\0'
am Ende kein Platz zum Hinzufügen vorhanden ist .quelle
.c_str()
)Warnung: Dies funktioniert nicht, wenn das s
std::string
enthält\0
.quelle
Ich bin auf diese Frage gestoßen, weil ich beim Befolgen der Antworten ein Problem hatte. Deshalb poste ich meine Lösung hier.
Die obigen Beispiele zeigen alle Beispiele mit Zeichenfolgen, die nur ASCII-Werte enthalten. In diesem Fall funktioniert alles einwandfrei. Wenn Sie jedoch mit Zeichenfolgen in Windows arbeiten, die auch andere Zeichen enthalten können, z. B. deutsche Umlaute, funktionieren diese Lösungen nicht
Der einzige Code, der in solchen Fällen korrekte Ergebnisse liefert, ist
Wenn Sie sich nicht mit solchen Zeichenfolgen befassen müssen, funktionieren die obigen Antworten einwandfrei.
quelle
fromLocal8Bit()
Darüber hinaus können Sie die QVariant-Klasse verwenden, um alles zu konvertieren, was Sie möchten.
beispielsweise:
Ausgabe
quelle
Meinen Sie eine C-Zeichenfolge wie in einer
char*
Zeichenfolge oder ein C ++ -std::string
Objekt?In beiden Fällen verwenden Sie denselben Konstruktor, wie in der QT-Referenz dokumentiert:
Verwenden Sie für eine reguläre C-Zeichenfolge einfach den Hauptkonstruktor:
Für a
std::string
erhalten Sie daschar*
an den Puffer und übergeben es an denQString
Konstruktor:quelle
QByteArray::QByteArray (const char* data, int size)
den Puffer zuerst umschließen und dann an denQString
Konstruktor übergeben.