char *ch1 = "hello11";
const char *ch2 = "hello22";
ch2 = ch1; // 警告但可行
ch1 = (char *)ch2; // 需強制轉型
// char → QString
char a = 'b';
QString str = QString(a);
// QString → char (取第一個字元)
QString str = "abc";
char ch = str.toLatin1().data()[0];
// QByteArray → char*
QByteArray byte;
char *ch = byte.data(); // 注意:byte 必須存活期間有效
// char* → QByteArray
char *ch = "data";
QByteArray byte = QByteArray(ch);
// QString → QByteArray (Latin-1 編碼)
QString string = "text";
QByteArray byte = string.toLatin1(); // 或 toUtf8()
// QByteArray → QString
QByteArray byte = "data";
QString string = QString(byte); // 或 QString::fromLatin1(byte)
qDebug() << "print"; // 正確
qDebug() << tr("中文"); // 正確 (tr() 回傳 QString)
qDebug() << "中文"; // 錯誤:const char* 需轉型
qDebug() << QString("中文"); // 正確
// int → QString
int a = 10;
QString b = QString::number(a);
// QString → int
QString a = "120";
int b = a.toInt(); // 可檢查 bool *ok 參數確認轉換成功
// QString → std::string
QString qstr = "text";
std::string str = qstr.toStdString();
// std::string → QString
std::string str = "text";
QString qstr = QString::fromStdString(str);
QString s = "3.14";
int i = s.toInt();
double d = s.toDouble();
const char *c = s.toStdString().c_str(); // 注意生命週期
int a = 42;
std::stringstream ss;
ss << a;
std::string str = ss.str();
QString qstr = QString::fromStdString(str);
// QDateTime → QString
QDateTime dt = QDateTime::currentDateTime();
QString str = dt.toString("yyyy年MM月dd日 dddd hh:mm:ss");
// QString → QDateTime (需指定格式)
QDateTime dt2 = QDateTime::fromString("M1d1y9800:01:02", "'M'M'd'd'y'yyhh:mm:ss");
QString qstr = "hello";
// 方法一:toLocal8Bit() (推薦,支援本地編碼)
const char *p1 = qstr.toLocal8Bit().data();
// 方法二:toStdString().data() (結果為 const)
const char *p2 = qstr.toStdString().data();
// 方法三:QByteArray 中介 (可修改緩衝區)
QByteArray ba = qstr.toLatin1();
char *p3 = ba.data(); // 非 const,但 ba 必須存活
// 方法四:手動複製 (完全擁有權)
QByteArray tmp = qstr.toLocal8Bit();
char *p4 = new char[tmp.size() + 1];
strcpy(p4, tmp.data());
// 使用完畢 delete[] p4;
核心原則:轉換產生的緩衝區指標 (data()) 生命週期綁定來源物件。若需長期持有,請深度複製 (strcpy/new/delete 或 QByteArray::data() 配合擁有權管理)。