qt5 deleteLater() 记录

博客记录了 Qt5 中 deleteLater() 的相关内容,涉及信息技术领域的 Qt 开发。

qt5 deleteLater() 记录

### Qt5 实现 FTP 文件夹上传功能指南 要通过 Qt5 将整个文件夹上传到 FTP 服务器,可以利用 `QFtp` 类(已弃用但在某些版本中仍可用)或者更现代的方式使用 `QNetworkAccessManager` 和 HTTP PUT 请求来模拟 FTP 功能。以下是详细的实现方法: #### 使用 QNetworkAccessManager 的方式 由于 `QFtp` 已被标记为过时并建议不再使用[^1],推荐采用基于 `QNetworkAccessManager` 的解决方案。 ##### 主要步骤说明 - 遍历本地文件夹中的所有文件及其子目录。 - 构建目标路径以匹配远程 FTP 结构。 - 对每个文件执行单独的上传操作。 下面是一个完整的代码示例,展示如何递归遍历文件夹并将其中的内容逐个上传至指定的 FTP 路径。 ```cpp #include <QCoreApplication> #include <QDir> #include <QFile> #include <QUrl> #include <QNetworkRequest> #include <QNetworkReply> #include <QNetworkAccessManager> void uploadFolder(const QString &localPath, const QString &ftpBasePath, QNetworkAccessManager *manager) { QDir dir(localPath); QStringList files = dir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); foreach (const QString &fileOrDirName, files) { QString fullPath = localPath + "/" + fileOrDirName; if (QFileInfo(fullPath).isDir()) { // 如果是目录,则递归调用 QString remoteSubdir = ftpBasePath + "/" + fileOrDirName; createRemoteDirectory(remoteSubdir, manager); // 创建远程目录 uploadFolder(fullPath, remoteSubdir, manager); } else { // 否则上传单个文件 QFile file(fullPath); if (!file.open(QIODevice::ReadOnly)) { qWarning() << "无法打开文件:" << fullPath; continue; } QByteArray data = file.readAll(); file.close(); QString remoteFilePath = ftpBasePath + "/" + fileOrDirName; QUrl url("ftp://yourserver.com/" + remoteFilePath); QNetworkRequest request(url); request.setRawHeader("Authorization", "Basic your_base64_encoded_credentials"); QNetworkReply *reply = manager->put(request, data); QObject::connect(reply, &QNetworkReply::finished, [=]() { if (reply->error() != QNetworkReply::NoError) { qWarning() << "上传失败:" << reply->errorString(); } reply->deleteLater(); // 清理资源 }); } } } // 辅助函数:创建远程目录 void createRemoteDirectory(const QString &remotePath, QNetworkAccessManager *manager) { QUrl mkdirUrl(QString("ftp://yourserver.com/%1").arg(remotePath)); QNetworkRequest request(mkdirUrl); request.setAttribute(QNetworkRequest::CustomVerbAttribute, "MKD"); request.setRawHeader("Authorization", "Basic your_base64_encoded_credentials"); QNetworkReply *mkdirReply = manager->sendCustomRequest(request, "MKD"); } ``` 上述代码片段展示了如何构建一个简单的 FTP 客户端逻辑,支持递归上传文件夹结构以及动态创建所需的远程目录。 #### 关键点解析 - **授权头设置**:为了访问受保护的 FTP 位置,请确保正确配置基本认证头部字段 `"Authorization"`。 - **错误处理机制**:对于每一步可能发生的异常情况均需加入适当日志记录以便调试排查问题。 - **异步特性管理**:注意所有的网络请求都是非阻塞式的;因此需要妥善安排信号槽连接关系以跟踪进度状态变化。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值