首页 > 其他分享 >Qt - Qt6中QTextStream类的setCodec方法没有了,怎么解决写中文文本乱码

Qt - Qt6中QTextStream类的setCodec方法没有了,怎么解决写中文文本乱码

时间:2024-05-25 14:45:55浏览次数:24  
标签:Qt6 Qt 乱码 file 文本 setCodec QTextStream

简介

场景:程序在linux下运行,将中英文写入文本,将文本在windows上打开时,中文出现乱码

 

原Qt5中:

QFile file;
file.open(QIODevice::WriteOnly|QIODevice::Text);

QTextStream textStream(&file);
textStream.setCodec("GBK");

使用 QTextStream 类的 setCodec 方法即可解决上述乱码

但是在Qt6中 QTextStream 类使用 setEncoding 代替 setCodec  方法,

但是 setEncoding 参数并没有GBK选项,QStringConverter::System选项并不能解决这种场景(只适用Windows写文本,在windows打开)

 

现Qt6中:

不能使用 QTextStream 类进行文本写入,改为使用 QByteArray 写入

由于Qt6中去掉了 QTextCodec 类,所以需要添加 Core5Compat 组件(添加方法很多博客都有写)

QFile file;
file.open(QIODevice::WriteOnly|QIODevice::Text);

QStringList strListAll;

QTextCodec* codec = QTextCodec::codecForName("GBK");
for (int i = 0; i < strListAll.size(); i++)
{
    QByteArray encodedLine = codec->fromUnicode(strListAll.at(i));
    file.write(encodedLine);
}

file.flush();
file.close();

 

参考:https://www.jb51.net/program/305874enl.htm

标签:Qt6,Qt,乱码,file,文本,setCodec,QTextStream
From: https://www.cnblogs.com/citrus/p/18212391

相关文章

  • qt一个线程管理的tcp
    写一个在x线程中管理的tcp#include<QThread>#include<QTcpSocket>#include<QObject>#include<QNetworkProxy>classTcpSocketController:publicQTcpSocket{Q_OBJECTpublic:TcpSocketController(QObject*parent=nullptr):QTcpSoc......
  • qt一个在线程管理的串口
    qt一个在线程管理的串口 #include<QObject>#include<QSerialPort>#include<QSerialPortInfo>#include<QDebug>#include<QFile>#include<QTextStream>#include<QThread>#include<QTimer>#include<QEventLoop>......
  • Qt moc系统的黑魔法?
    Qt的元对象系统(Meta-ObjectSystem)是Qt框架的核心功能之一,为C++语言增加了一些动态特性,借助元对象系统Qt可以实现以下功能信号与槽机制(SignalsandSlots)运行时类型信息(Run-TimeTypeInformation,RTTI)属性系统(PropertySystem)动态对象创建(DynamicObjectCreation)动态方法调......
  • QTreeView中item节点任意拖拽移动,添加,删除与自绘指示器
    文章目录效果图主要功能点概要遇到的问题指示器拖拽总结效果图主要功能点节点自由拖拽移动自绘树的指示器可拖拽添加节点概要整体还是对于model-view这一套的使用,左侧的实现可看我的这篇文章,本文具体讲讲这个树QTreeView的拖拽与自绘指示器。关于树......
  • C++/Qt桌面应用学习路线参考
    ......
  • 银河麒麟 PyQt 环境搭建
    银河麒麟PyQt环境搭建来自于:https://www.byhy.net/etc/blog/kylin/点击这里,边看视频讲解,边学习本章银河麒麟桌面版,本质上是Ubuntu,所以设置方式和Ubuntu类似。安装PIP银河麒麟桌面版V10-SP1内置的Python解释器没有自带包管理器PIP。执行下面的命令安装即可......
  • python 离线按照PyQt5
    首先外网下载所需要的安装包1.新建虚拟环境python-mvenvQtTest2.安装PyQt5和PyQt5-tools这两个库pipinstallpyQt5-tool-ihttps://mirrors.aliyun.com/pypi/simple/pipinstallPyQt5-tool-ihttps://mirrors.aliyun.com/pypi/simple/3.导出requirements.txt这个文......
  • Qt线程使用方法三:QtConcurrent::run
    在Qt中,QFuture和QtConcurrent模块提供了一种简便的方式来执行并行任务。QFuture用于接收异步操作的结果,而QtConcurrent提供了一些函数来启动异步操作。这种方法不需要直接使用QThread,而是通过高级API来管理线程池和任务。 步骤 1: 包含必要的头文件 首先,确保你的项目文件(如......
  • Qt线程使用方法二:派生QThread
    在Qt中,从QThread派生一个子类并在构造函数中传入需要执行的方法,然后在线程中运行该方法并通知执行结果,是一种常见的多线程处理模式。以下是如何实现这一功能的步骤和示例代码: 步骤 1: 定义线程类 首先,定义一个从QThread派生的线程类。在这个类中,你可以定义一个函数指针或者......
  • Qt线程使用方法一:moveToThread
    在Qt中创建线程去执行耗时任务,并在任务完成后通知调用方(无论成功还是失败),可以通过使用QThread和信号槽机制来实现。以下是一个简单的示例,展示如何创建一个线程来执行任务,并在任务完成后发送信号。步骤 1: 定义工作类首先,定义一个工作类,该类将在单独的线程中执行任务。这个类......