QString 与 std::string 的相互转换方法

Visual Studio 2017 + Qt5.12.0

下面这段代码Release下编译运行都没问题,但Debug模式下运行报错,程序崩溃:

std::string a("abc");
QString b = QString::fromStdString(a);

试了半天也没找到一个通用的办法,于是根据网上的指导,根据字符串定义时的原始类型,找到了一种根据原始类型判断互转的办法:

复制代码
//QString to std::string
QString qs_original("ab中国cd");
std::string str = qs_original.toUtf8().constData();
QString qs_recovered = QString::fromUtf8(QByteArray::fromRawData(str.c_str(), str.size()));

//std::string to QString
std::string str_original("ab中国cd");
QString qs = QString::fromUtf8(QByteArray::fromRawData(str_original.c_str(), str_original.size()));
std:string str_recovered = qs.toLocal8Bit().constData();
复制代码

经试验,与QString 转换过程中 utf-8 显示可能为乱码,Local8Bit 不会有乱码,所以有以下方法:

复制代码
void stdString2QString(std::string str, QString &qs)
{
    qs = QString::fromLocal8Bit(QByteArray::fromRawData(str.c_str(), str.size()));
}

void QString2stdString(QString qs, std::string &str)
{
    str = qs.toLocal8Bit().constData();
}
复制代码

测试代码如下:

std::string str("ab中国cd");
QString qs;
stdString2QString(str, qs);
std::string str2;
QString2stdString(qs, str2);

搞定!

posted on   空明流光  阅读(8594)  评论(0编辑  收藏  举报

编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示