zoukankan      html  css  js  c++  java
  • 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);

    搞定!

  • 相关阅读:
    2491 玉蟾宫
    1704 卡片游戏
    1020 孪生蜘蛛
    1215 迷宫
    3149 爱改名的小融 2
    1316 文化之旅 2012年NOIP全国联赛普及组
    1664 清凉冷水
    157. [USACO Nov07] 奶牛跨栏
    [SCOI2005]繁忙的都市
    【NOIP2014模拟赛No.1】我要的幸福
  • 原文地址:https://www.cnblogs.com/nanfei/p/13230843.html
Copyright © 2011-2022 走看看