QT QString中文转 const char*乱码问题

QString转char*通常是用以下的函数

QString str = "加载文件";

const char *pFile = str.toStdString().c_str();

如果是英文不会出问题,但是如果QString str中含有中文字符,就会出现乱码

解决方法:

QByteArray ba=str .toLocal8Bit();

const char *pFile=ba.data();

例如:

不能一步写成 char *pFile=str.toLocal8Bit().data();

还是要分开写的,这一步不能省

我的使用例子:

修改前:

//自定义消息类
void My_custom_ShowMessage(const std::pair& msg)
{
	SendMyMessage(Msg_Custom_ShowMessage, Any(msg));
}

QString path = "text.xml";
QString strInfo = QStringLiteral("加载文件 ") + path;
My_custom_ShowMessage(std::pair(3, strInfo.toStdString().c_str()));
	
	
case Msg_Custom_ShowMessage:
{
			std::pair msg = any_cast>(any);
			const char* pszMsg = msg.second;
			char szMsgAll[10240];
	        sprintf(szMsgAll, "%s", pszMsg);
			const string& src = szMsgAll;
			QString itemgetString = QString::fromUtf8(src.c_str());//此时是乱码了
}	

修改后:


QString path = "text.xml";
//自定义消息类
void My_custom_ShowMessage(const std::pair& msg)
{
	SendMyMessage(Msg_Custom_ShowMessage, Any(msg));
}

QString strInfo = QStringLiteral("加载文件 ") + path;
QByteArray ba = strInfo.toLocal8Bit();

My_custom_ShowMessage(std::pair(3, ba));

case Msg_Custom_ShowMessage:
{
			std::pair msg = any_cast>(any);
			const char* pszMsg = msg.second;
			char szMsgAll[10240];
	        sprintf(szMsgAll, "%s", pszMsg);
			const string& src = szMsgAll;
			QString itemgetString = QString::fromUtf8(src.c_str());//此时不是乱码了
}	

你可能感兴趣的:(qt,qt,开发语言,c++)