平常转换没怎么注意,一般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.代码分析
-
//向QList中添加4个项
-
QList<QWidget*> lstWidget;
-
lstWidget.append(new QWidget);
-
lstWidget.append(new QWidget);
-
lstWidget.append(new QWidget);
-
lstWidget.append(new QWidget);
情况1: 采用foreach遍历清空,removeOne元素
-
foreach(QWidget *widget,lstWidget)
-
{
-
if(widget)
-
{
-
lstWidget.removeOne(widget);
-
delete widget;
-
widget = nullptr;
-
}
-
}
处理后
处理前
结果:清空QList并且释放了内存,防止内存泄漏 。
情况2:采用迭代器的方式清空元素
-
QList<QWidget*>::iterator iter = lstWidget.begin();
-
for (; iter != lstWidget.end(); iter++)
-
{
-
if ((*iter) != nullptr)
-
{
-
delete (*iter);
-
*iter = nullptr;
-
}
-
}
处理前
处理后
结果:释放了内存,但是未清空QList,所以要在后面调用clear() 接口。
情况3:采用qDeleteAll();
qDeleteAll(lstWidget.begin(),lstWidget.end());
处理前
处理后
结果:释放了内存,但是没有置为nullptr,未清空QList,所以要在后面调用clear() 接口。