Qt5中使用QFtp模块,解决乱码问题和编译器警告

Qt5中如何使用QFtp模块

QFtp模块本来在Qt4中是自带的,但升级到Qt5后,被移除了,Qt给出的替代品是QNetworkAccessManager,名字变长了不少不说,功能还变弱了(至少FTP功能变弱了),无法再使用ftp的获取列表,新建,删除,重命名…等等一系列操作,只能单纯完成文件上传下载,要想实现完全的FTP功能,还得用QFtp,在Qt5里面使用QFtp模块很多种方法,比如下载别人编好的库,或者自己编译QFtp等等,网上很多资料都介绍了,这里不赘述,最终我选择了源码直接引用到工程中,毕竟QFtp模块只有两个源文件,这样避免了很多库兼容的问题,保证100%可用。
但是QFtp毕竟是Qt4时代的产物,在Qt5中还是存在一些兼容问题的,我遇到了2个:
1.ftp中文目录乱码
2.出现运行时警告“Using QCharRef with an index pointing outside the valid range of a QString. The corresponding behavior is deprecated, and will be changed in a future version of Qt.”
下面我把解决的思路方法放上来。

ftp中文目录乱码

这个问题在网上有诸多解决方法,但是大多不奏效,有些奏效但换个编译器或者换个平台就不行了,实际上这个问题是Qt4->Qt5不同的编码规则带来的。
与其使用QFtp时修修补补,不如直接修改源码,将qftp.cpp中所有fromLatin1()替换成fromUtf8(),toLatin1()替换成toUtf8(),一切搞定。
因为Latin1可看做是Utf8的一个子集,所以这种替换是安全的。

解决“Using QCharRef with an index pointing outside the valid range of a QString”的编译器警告

这个警告的意思是错误使用了QString,[]索引超过了QString的长度,经过漫长的定位,出错的代码位于qftp.cpp,代码段如下:

QString endOfMultiLine;
endOfMultiLine[0] = '0' + replyCode[0];
endOfMultiLine[1] = '0' + replyCode[1];
endOfMultiLine[2] = '0' + replyCode[2];
endOfMultiLine[3] = QLatin1Char(' ');

显然这种写法不太讲究,使用QString前设置一下长度就好了——

QString endOfMultiLine;
endOfMultiLine.resize(4);
endOfMultiLine[0] = '0' + replyCode[0];
...

结束

如果以上内容帮助到你,请点个赞~~

qftp 是一种用于文件传输和管理的协议,而乱码则是指在使用 qftp 时,文目录名称显示为乱码问题。 出现 qftp 文目录乱码的情况通常是由于以下几个原因导致的: 1. 字符编码问题:qftp 默认使用的字符编码可能与文目录名称使用的字符编码不一致,导致显示乱码。可以尝试设置 qftp 的字符编码为 UTF-8,以保证文目录名称的正确显示。 2. 网络传输问题:在使用 qftp 进行文件传输时,如果网络环境不稳定或存在干扰,可能会导致传输的文目录乱码。可以尝试使用更稳定的网络连接,或在传输前对文目录进行压缩处理,以避免传输时的字符编码问题。 3. 系统环境问题:有些操作系统的默认字符编码与 qftp 的字符编码不一致,也可能导致文目录乱码。在这种情况下,可以尝试更改操作系统的字符编码设置,以与 qftp 保持一致。 为解决 qftp 文目录乱码问题,可以采取以下措施: 1. 设置字符编码:在使用 qftp 之前,可以明确指定字符编码为 UTF-8,以确保文目录名称的正确显示。 2. 压缩文件传输:在进行文件传输时,将文目录先进行压缩,然后再进行传输。这样可以避免传输时的字符编码问题,同时也能节省传输的时间和带宽。 3. 更改操作系统字符编码设置:如果 qftp 与操作系统的字符编码设置不一致,可以尝试更改操作系统的字符编码,使其与 qftp 保持一致。 综上所述,解决 qftp 文目录乱码问题的关键是确保字符编码一致,并在传输注意网络稳定性,如此可有效避免文目录乱码的出现。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值