首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Qt 型別轉換大全:QString、QByteArray、char*、std::string 互轉

     編輯:關於C語言

常見型別轉換速查表

char* 與 const char* 互轉

char *ch1 = "hello11";
const char *ch2 = "hello22";
ch2 = ch1;           // 警告但可行
ch1 = (char *)ch2;   // 需強制轉型

char (單字元) 與 QString 互轉

// char → QString
char a = 'b';
QString str = QString(a);

// QString → char (取第一個字元)
QString str = "abc";
char ch = str.toLatin1().data()[0];

QByteArray 與 char* 互轉

// QByteArray → char*
QByteArray byte;
char *ch = byte.data();  // 注意:byte 必須存活期間有效

// char* → QByteArray
char *ch = "data";
QByteArray byte = QByteArray(ch);

QString 與 QByteArray 互轉

// QString → QByteArray (Latin-1 編碼)
QString string = "text";
QByteArray byte = string.toLatin1();  // 或 toUtf8()

// QByteArray → QString
QByteArray byte = "data";
QString string = QString(byte);  // 或 QString::fromLatin1(byte)

QString 輸出除錯資訊

qDebug() << "print";           // 正確
qDebug() << tr("中文");        // 正確 (tr() 回傳 QString)
qDebug() << "中文";            // 錯誤:const char* 需轉型
qDebug() << QString("中文");   // 正確

int 與 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 → std::string
QString qstr = "text";
std::string str = qstr.toStdString();

// std::string → QString
std::string str = "text";
QString qstr = QString::fromStdString(str);

QString 轉基本型別

QString s = "3.14";
int i = s.toInt();
double d = s.toDouble();
const char *c = s.toStdString().c_str();  // 注意生命週期

基本型別轉 QString (通用串流法)

int a = 42;
std::stringstream ss;
ss << a;
std::string str = ss.str();
QString qstr = QString::fromStdString(str);

QDateTime 與 QString 互轉

// 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 → char* 三種做法

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() 配合擁有權管理)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved