Apa cara paling mendasar untuk melakukannya?
Jika menurut Anda std::string
Anda dapat melakukannya dengan metode ini:
QString QString :: fromStdString (const std :: string & str)
std::string str = "Hello world";
QString qstr = QString::fromStdString(str);
Jika dengan string maksud Anda Ascii disandikan const char *
maka Anda dapat menggunakan metode ini:
QString QString :: fromAscii (const char * str, int size = -1)
const char* str = "Hello world";
QString qstr = QString::fromAscii(str);
Jika Anda telah const char *
disandikan dengan penyandian sistem yang dapat dibaca dengan QTextCodec :: codecForLocale () maka Anda harus menggunakan metode ini:
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);
Jika Anda memiliki const char *
UTF8 yang disandikan maka Anda harus menggunakan metode ini:
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);
Ada juga metode untuk const ushort *
berisi string yang dikodekan UTF16:
QString QString :: fromUtf16 (const ushort * unicode, ukuran int = -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);
Jika dikompilasi dengan kompatibilitas STL,
QString
memiliki metode statis untuk mengonversi astd::string
keQString
:sumber
QString qstr = QString(str.c_str());
? Tidak yakin apakahQString
salinan apa yang diteruskan ke dalamnya.fromStdString
akan melestarikan ini, membangun dari.c_str
tidak akan. (Dan tepatnya bagaimana melakukan ini yang membuat saya ke pertanyaan ini.)Cara alternatif:
Ini memiliki keuntungan karena tidak menggunakan
.c_str()
yang dapat menyebabkanstd::string
untuk menyalin sendiri jika tidak ada tempat untuk menambahkan'\0'
di akhir.sumber
.c_str()
)Peringatan: Ini tidak akan berfungsi jika
std::string
mengandung\0
s.sumber
Saya menemukan pertanyaan ini karena saya mempunyai masalah ketika mengikuti jawaban, jadi saya memposting solusi saya di sini.
Contoh di atas semua menunjukkan sampel dengan string yang hanya berisi nilai ASCII, dalam hal ini semuanya berfungsi dengan baik. Namun, ketika berhadapan dengan string di Windows yang juga dapat berisi karakter lain, seperti umlaut Jerman, maka solusi ini tidak berfungsi
Satu-satunya kode yang memberikan hasil yang benar dalam kasus tersebut adalah
Jika Anda tidak harus berurusan dengan string seperti itu, maka jawaban di atas akan berfungsi dengan baik.
sumber
fromLocal8Bit()
Selain itu, untuk mengonversi apa pun yang Anda inginkan, Anda dapat menggunakan kelas QVariant.
sebagai contoh:
keluaran
sumber
Apakah maksud Anda string C, seperti dalam
char*
string, atau objek C ++std::string
?Either way, Anda menggunakan konstruktor yang sama, seperti yang didokumentasikan dalam referensi QT:
Untuk string C biasa, cukup gunakan konstruktor utama:
Untuk a
std::string
, Anda mendapatkanchar*
ke buffer dan meneruskannya keQString
konstruktor:sumber
QByteArray::QByteArray (const char* data, int size)
untuk membungkus buffer terlebih dahulu, dan kemudian meneruskannya keQString
konstruktor.