Apa cara paling mendasar untuk melakukannya?
Apa cara paling mendasar untuk melakukannya?
Jawaban:
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 a std::string
ke QString
:
std::string str = "abc";
QString qstr = QString::fromStdString(str);
QString qstr = QString(str.c_str());
? Tidak yakin apakah QString
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:
std::string s = "This is an STL string";
QString qs = QString::fromAscii(s.data(), s.size());
Ini memiliki keuntungan karena tidak menggunakan .c_str()
yang dapat menyebabkan std::string
untuk menyalin sendiri jika tidak ada tempat untuk menambahkan '\0'
di akhir.
.c_str()
)
std::string s = "Sambuca";
QString q = s.c_str();
Peringatan: Ini tidak akan berfungsi jika std::string
mengandung \0
s.
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
std::string s = "Übernahme";
QString q = QString::fromLocal8Bit(s.c_str());
Jika Anda tidak harus berurusan dengan string seperti itu, maka jawaban di atas akan berfungsi dengan baik.
fromLocal8Bit()
Selain itu, untuk mengonversi apa pun yang Anda inginkan, Anda dapat menggunakan kelas QVariant.
sebagai contoh:
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();
keluaran
"hello !"
"10"
"5.42"
5
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:
char name[] = "Stack Overflow";
QString qname(name);
Untuk a std::string
, Anda mendapatkan char*
ke buffer dan meneruskannya ke QString
konstruktor:
std::string name2("Stack Overflow");
QString qname2(name2.c_str());
QByteArray::QByteArray (const char* data, int size)
untuk membungkus buffer terlebih dahulu, dan kemudian meneruskannya ke QString
konstruktor.