QString转换QByteArray时中文问题解决方案

本文介绍了在Qt中处理QString与QByteArray转换时遇到的中文乱码问题,特别是QJsonDocument从QString转换时的错误。解决方案包括使用.toStdString().data()方法以及修改字符串编码方式。同时,文章探讨了QList清空操作的三种方式,包括使用foreach、迭代器和qDeleteAll,分析了它们的优缺点和适用场景。
摘要由CSDN通过智能技术生成

平常转换没怎么注意,一般QString转换成QByteArray不会出现问题,今天涉及到QJsonDocument类,转换出现以下问题:

1、用toLocal8Bit()

QJsonDocument::fromJson(stringData.toLocal8Bit(), &jsonError);  // 转化为 JSON 文档
if (doucment.isNull()  ||  (jsonError.error != QJsonParseError::NoError)) {
        qDebug() << "Error : " << "doucment:" << doucment.isNull() << "jsonError:" << jsonError.error

};

直接Error报错,jsonError错误9。


2、用toLatin1()类虽然可以转换,但是遇到中文,显示?????。

QJsonDocument::fromJson(stringData.toLocal8Bit(), &jsonError);  
3、于是用了这个方法,问题解决:
QJsonDocument::fromJson(byteArray.toStdString().data(), &jsonError);  

/*******************************************

QT与QString 中文乱码问题解决方法

QT 中显示中文异常 解决办法
首先修改编码方式
可以通过记事本另存为将编码改为“带有BOM的UTF-8”。
QT中设置默认编码“UTF-8”,UT-8 BOM设置为“如果编码是UTF-8则添加”。
QString 不要直接赋值,而是使用 QStringLiteral(“中文测试”)方法
将QString 转为 string时中文乱码 解决办法
QString str2qstr(const string str) 

    return QString::fromLocal8Bit(str.data()); 

   
string qstr2str(const QString qstr) 

    QByteArray cdata = qstr.toLocal8Bit(); 
    return string(cdata); 

/*************************************************

QString转换QByteArray时中文问题解决方案

平常转换没怎么注意,一般QString转换成QByteArray不会出现问题,今天涉及到QJsonDocument类,转换出现以下问题:

1、用toLocal8Bit()

QJsonDocument::fromJson(stringData.toLocal8Bit(), &jsonError);  // 转化为 JSON 文档
if (doucment.isNull()  ||  (jsonError.error != QJsonParseError::NoError)) {
        qDebug() << "Error : " << "doucment:" << doucment.isNull() << "jsonError:" << jsonError.error

};

直接Error报错,jsonError错误9。


2、用toLatin1()类虽然可以转换,但是遇到中文,显示?????。

QJsonDocument::fromJson(stringData.toLocal8Bit(), &jsonError);  
3、于是用了这个方法,问题解决:
QJsonDocument::fromJson(byteArray.toStdString().data(), &jsonError);   
/**************************************************************************************

QT QLIST清空问题

1.代码分析

 
  1. //向QList中添加4个项

  2. QList<QWidget*> lstWidget;

  3. lstWidget.append(new QWidget);

  4. lstWidget.append(new QWidget);

  5. lstWidget.append(new QWidget);

  6. lstWidget.append(new QWidget);

情况1: 采用foreach遍历清空,removeOne元素

 
  1. foreach(QWidget *widget,lstWidget)

  2. {

  3. if(widget)

  4. {

  5. lstWidget.removeOne(widget);

  6. delete widget;

  7. widget = nullptr;

  8. }

  9. }

 

 

处理后

处理前

结果:清空QList并且释放了内存,防止内存泄漏 。

情况2:采用迭代器的方式清空元素

 
  1. QList<QWidget*>::iterator iter = lstWidget.begin();

  2. for (; iter != lstWidget.end(); iter++)

  3. {

  4. if ((*iter) != nullptr)

  5. {

  6. delete (*iter);

  7. *iter = nullptr;

  8. }

  9. }

处理前

处理后

结果:释放了内存,但是未清空QList,所以要在后面调用clear() 接口。

情况3:采用qDeleteAll();

qDeleteAll(lstWidget.begin(),lstWidget.end());

处理前

处理后

 结果:释放了内存,但是没有置为nullptr,未清空QList,所以要在后面调用clear() 接口。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值