วิธีพื้นฐานที่สุดในการทำคืออะไร?
วิธีพื้นฐานที่สุดในการทำคืออะไร?
คำตอบ:
ถ้าตามสายคุณหมายความว่าstd::string
คุณสามารถทำได้ด้วยวิธีนี้:
QString QString :: fromStdString (const std :: string & str)
std::string str = "Hello world";
QString qstr = QString::fromStdString(str);
ถ้าเป็น string หมายความว่า Ascii encoded const char *
คุณสามารถใช้วิธีนี้ได้:
QString QString :: fromAscii (const char * str ขนาด int = -1)
const char* str = "Hello world";
QString qstr = QString::fromAscii(str);
หากคุณconst char *
เข้ารหัสด้วยการเข้ารหัสระบบที่สามารถอ่านได้ด้วยQTextCodec :: codecForLocale ()คุณควรใช้วิธีนี้:
QString QString :: fromLocal8Bit (const char * str ขนาด int = -1)
const char* str = "zażółć gęślą jaźń"; // latin2 source file and system encoding
QString qstr = QString::fromLocal8Bit(str);
หากคุณมีconst char *
การเข้ารหัส UTF8 คุณจะต้องใช้วิธีนี้:
QString QString :: fromUtf8 (const char * str ขนาด int = -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);
นอกจากนี้ยังมีวิธีการconst ushort *
บรรจุสตริงที่เข้ารหัส UTF16:
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);
หากคอมไพล์ด้วยความเข้ากันได้ STL QString
มีวิธีการแบบคงที่ในการแปลงstd::string
เป็นQString
:
std::string str = "abc";
QString qstr = QString::fromStdString(str);
QString qstr = QString(str.c_str());
? ไม่แน่ใจว่าQString
คัดลอกสิ่งที่ส่งเข้ามาหรือไม่
fromStdString
จะเก็บสิ่งเหล่านี้จากการสร้าง.c_str
ไม่ได้ (และเป็นวิธีการทำเช่นนี้อย่างแม่นยำซึ่งนำฉันมาสู่คำถามนี้)
ทางเลือก:
std::string s = "This is an STL string";
QString qs = QString::fromAscii(s.data(), s.size());
นี่คือข้อดีของการไม่ใช้งาน.c_str()
ซึ่งอาจทำให้การstd::string
คัดลอกตัวเองในกรณีที่ไม่มีสถานที่ที่จะเพิ่ม'\0'
ในตอนท้าย
.c_str()
)
std::string s = "Sambuca";
QString q = s.c_str();
คำเตือน:สิ่งนี้จะไม่ทำงานหากstd::string
มี\0
รายการ
ฉันเจอคำถามนี้เพราะฉันมีปัญหาเมื่อทำตามคำตอบดังนั้นฉันโพสต์คำตอบของฉันที่นี่
ตัวอย่างข้างต้นทั้งหมดแสดงตัวอย่างพร้อมสตริงที่มีค่า ASCII เท่านั้นซึ่งทุกอย่างทำงานได้ดี อย่างไรก็ตามเมื่อจัดการกับสตริงใน Windows ซึ่งสามารถมีอักขระอื่น ๆ เช่น umlauts ภาษาเยอรมันได้ดังนั้นโซลูชันเหล่านี้จึงใช้ไม่ได้
รหัสเดียวที่ให้ผลลัพธ์ที่ถูกต้องในกรณีเช่นนี้คือ
std::string s = "Übernahme";
QString q = QString::fromLocal8Bit(s.c_str());
หากคุณไม่ต้องจัดการกับสตริงดังกล่าวคำตอบข้างต้นจะใช้ได้ดี
fromLocal8Bit()
นอกจากนี้ในการแปลงสิ่งที่คุณต้องการคุณสามารถใช้คลาส QVariant
ตัวอย่างเช่น:
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();
เอาท์พุต
"hello !"
"10"
"5.42"
5
คุณหมายถึงสตริง C เช่นเดียวกับในchar*
สตริงหรือstd::string
วัตถุC ++ ?
ไม่ว่าจะใช้วิธีใดคุณใช้ Constructor เดียวกันตามที่ระบุไว้ในเอกสารอ้างอิง QT:
สำหรับสตริง C ปกติให้ใช้ตัวสร้างหลัก:
char name[] = "Stack Overflow";
QString qname(name);
สำหรับ a std::string
คุณจะได้รับchar*
บัฟเฟอร์และส่งต่อไปยังQString
constructor:
std::string name2("Stack Overflow");
QString qname2(name2.c_str());
QByteArray::QByteArray (const char* data, int size)
เพื่อตัดบัฟเฟอร์ก่อนแล้วจึงส่งไปยังตัวQString
สร้าง