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

2023-05-16

平常转换没怎么注意,一般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() 接口。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QString转换QByteArray时中文问题解决方案 的相关文章

  • qt中QByteArray最多存储多少个字节?

    对QByteArray的测试 xff0c 加断点后发现最多可存储2147483647个字节 xff0c 如果超出2147483647个字节需要开辟内存进行数据存储 xff0c 环境为QT5 12 3 43 MSVC2017 如下 xff1a
  • QT中操作Txt文件(Qt中QString与QByteArray互相转化方法)

    Qt如何把QString写入txt文件中 1 示范代码 由于write不能把QString直接写入文件中 xff0c 因此有两种方法来处理 xff1a 1 使用QTextStream类 中英文都可以存 读入文件 QFile file fil
  • qt中解决QString中文乱码问题方法

    Qt中解决中文乱码的问题 qt中一般在设计师界面中设置的中文标题啥的都能正常显示 但是在QString中 xff0c 比如QPainter在绘制Text的时候 xff0c 传入的 char 如果含有中文 xff0c 则一般都会显示乱码 这个
  • QString转换QByteArray时中文问题解决方案

    平常转换没怎么注意 xff0c 一般QString转换成QByteArray不会出现问题 xff0c 今天涉及到QJsonDocument类 xff0c 转换出现以下问题 xff1a 1 用toLocal8Bit QJsonDocument
  • Qt中 QString 和int, char等的“相互”转换

    原文链接 xff1a https blog csdn net ei nino article details 7297791 Qt中 int float double转换为QString 有两种方法 1 使用QString number 如
  • Qt学习 第37节:QString

    在阅读QString文档时 xff0c 出了一个词 implicit sharing copy on write xff0c 不是很懂 xff0c 下面链接解释的表明白 QT的隐式共享 Implicit Sharing 道路与梦想 CSDN
  • Qt中QString与String的互相转换

    前言 Qt中的一些类型是Qt自己封装的 xff0c 例如我们平常常见的String在Qt中就是QString xff0c 但是有时我们调用第三方库时 xff0c 参数要求是String xff0c 这时我们就需要把QString转换成Str
  • QT 在Windows下显示中文乱码的问题

    前一段时间刚刚使用qt在显示表格数据的时候 发现输出中文是乱码的 比如在显示字符串加上变量输出的的时候一般在MFC方法有很多 但是在QT上初始化字符串加上变量的话就得这么写 QString 第 1跟 arg 16 i 但是这样的话 中文就会
  • utf8格式源代码中的字符串,默认都会当作char来处理,除非用L""符号来修饰

    原先QString mystrr 现在都不认了 必须都要加上L才行 原先 m conn gt put HttpProxyAuthMethod Basic 现在 m conn gt put HttpProxyAuthMethod L Basi
  • 将带有百分比编码的 QUrl 转换为字符串

    我使用用户输入的 URL 作为文本来初始化 QUrl 对象 稍后我想将 QUrl 转换回字符串以显示它并使用正则表达式检查它 只要用户不输入任何百分比编码的 URL 这种方法就可以正常工作 为什么下面的示例代码不起作用 qDebug lt
  • QString 仅替换第一次出现的位置

    有没有简单的方法可以仅用 QString 中的其他子字符串替换某些子字符串的第一次出现 它可以在任何位置 你可以试试这个 QString str this is a string The initial string QString sub
  • 在 Qt 中将字符数组的内容复制到 QString

    我有一个字符指针 在任何运行中都可以有不同的长度 例如 char myChar 一次运行其内容可以是 Hi 在另一次运行中它可以是 Bye 我想复制内容myChar到 QString 例如如果我有 QString myString 我想复制
  • 在 Qt 中将 QString 转换为 Ascii 值,反之亦然

    我有一个QString StrData abcd 我想要得到Ascii该字符串的十六进制值 反之亦然 例如来自 abcd to 61 62 63 64 和来自 61 62 63 64 to abcd 我设法获得十六进制的 Ascii 值 但
  • 非 QObject 派生类是否应该“始终”放入堆栈中?

    来自 Symbian 世界 我习惯于尽可能多地使用堆以避免耗尽堆栈空间 特别是在处理描述符时 CBase 派生类总是在堆上动态分配 因为如果不这样做 它们的成员变量将保持未初始化状态 相同的约定是否适用于 QObject 派生类 在 Qt
  • 如何在 QLineEdit 中使用 std::string ?

    我有以下问题 我正在尝试将我编写的大量代码与 Qt 界面集成 我的一些函数返回std string 我没有成功制作QLineEdit setText接受它们 其他函数返回char不要给我带来问题 我应该怎么办 谢谢 朱塞佩 尝试这个 std
  • 在 QT 的 textedit 中为特定行(由光标指示)着色,但每次按下按钮时光标的位置都会随着功能而变化

    我是这样编辑的 但是 即使单词已添加到正确的位置并着色 所有文本也不会打印在 textEdit 中 ui gt textEdit gt setText display text QTextcursor cursor ui gt textEd
  • 将 QString 转换为 std::string

    我看过其他几篇关于将 QString 转换为 std string 的帖子 它应该很简单 但不知怎的 我收到了一个错误 我的代码使用cmake编译成VS项目 我使用的是VS Express 所以QT库没有问题 而且我编写的GUI除了这部分之
  • 将数字格式化为特定的 QString 格式

    我有一个关于将十进制数格式化为某种 QString 格式的问题 基本上 我的程序中有一个可以接受任何值的输入框 我希望它将这个框中的值转换为格式 05 30 基于该值 该值将限制为 99 99 一些例子包括 2 gt 00 02 1 5 g
  • for循环中的Qt字符串生成器

    下列的this http labs qt nokia com 2011 06 13 string concatenation with qstringbuilder and this http doc snapshot qt project
  • 将 QStringList (PyQt) 转换为普通的 Python 列表

    我想获取 qstringlist 中的每个元素并从列表中获取原始数据 而不是 pyqt 将其存储为的任何数据 def find self self foundFileList setRowCount 0 fileName self inpu

随机推荐