QT---FTP练习,连接FTP服务器,浏览其中的文件,下载到本地目录中

2023-11-07

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 
   
   
    
    
#include 
    
    
     
     
#include 
     
     
      
      
#include 
      
      
       
       
#include 
       
       
         MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->progressBar->setValue(0); connect(ui->fileList,SIGNAL(itemActivated(QTreeWidgetItem*,int)),this,SLOT(processItem(QTreeWidgetItem*,int)) ); } MainWindow::~MainWindow() { delete ui; } void MainWindow::ftpCommandStarted(int) { int id=ftp->currentCommand(); switch (id) { case QFtp::ConnectToHost: ui->label->setText(tr("connecting to the qftp...")); break; case QFtp::Login: ui->label->setText(tr("logining ...")); break; case QFtp::Get: ui->label->setText(tr("loading ...")); break; case QFtp::Close: ui->label->setText(tr("run to close ...")); default: break; } } void MainWindow::ftpCommandFinished(int,bool error) { if(ftp->currentCommand()==QFtp::ConnectToHost){ if(error) ui->label->setText(tr("connection has found error: %1").arg(ftp->errorString())); else ui->label->setText(tr("connecting successful")); } else if(ftp->currentCommand()==QFtp::Login){ if(error) ui->label->setText(tr("login has found error: %1").arg(ftp->errorString())); else ui->label->setText(tr("login successful")); } else if(ftp->currentCommand()==QFtp::Get){ if(error) ui->label->setText(tr("load has found error: %1").arg(ftp->errorString())); else{ ui->label->setText(tr("load successful")); file->close(); } ui->downloadButton->setEnabled(true); } else if(ftp->currentCommand()==QFtp::List){ if(isDirectory.isEmpty()) { ui->fileList->addTopLevelItem(new QTreeWidgetItem(QStringList()< 
        
          fileList->setEnabled(false); ui->label->setText(tr("folder is empty")); } } else if(ftp->currentCommand()==QFtp::Close){ ui->label->setText(tr("closed")); } } void MainWindow::updateDataTransferProgress(qint64 readBytes, qint64 totalBytes) { ui->progressBar->setMaximum(totalBytes); ui->progressBar->setValue(readBytes); } void MainWindow::addToList(const QUrlInfo &urlInfo) { QTreeWidgetItem *item=new QTreeWidgetItem; item->setText(0,urlInfo.name()); item->setText(1,QString::number(urlInfo.size())); item->setText(2,urlInfo.owner()); item->setText(3,urlInfo.group()); item->setText(4,urlInfo.lastModified().toString("yyyy-MM-dd")); QPixmap pixmap; item->setIcon(0,pixmap); isDirectory[urlInfo.name()]=urlInfo.isDir(); ui->fileList->addTopLevelItem(item); if(! ui->fileList->currentItem()){ ui->fileList->setCurrentItem(ui->fileList->topLevelItem(0)); ui->fileList->setEnabled(true); } } void MainWindow::processItem(QTreeWidgetItem *item, int) { QString name=item->text(0); if(isDirectory.value(name)){ ui->fileList->clear(); isDirectory.clear(); currentPath+="/download"; currentPath+=name; ftp->cd(name); ftp->list(); ui->cdToParentButton->setEnabled(true); } } void MainWindow::on_connectButton_clicked() { ui->fileList->clear(); currentPath.clear(); isDirectory.clear(); ftp=new QFtp(this); connect(ftp,SIGNAL(commandStarted(int)),this,SLOT(ftpCommandStarted(int))); connect(ftp,SIGNAL(commandFinished(int,bool)),this,SLOT(ftpCommandFinished(int,bool))); connect(ftp,SIGNAL(listInfo(QUrlInfo)),this,SLOT(addToList(QUrlInfo))); connect(ftp,SIGNAL(dataTransferProgress(qint64,qint64)),this,SLOT(updateDataTransferProgress(qint64,qint64))); QString ftpServer = ui->ftpServerlineEdit->text(); QString userName = ui->userNamelineEdit->text(); QString passWord = ui->passWordlineEdit->text(); ftp->connectToHost(ftpServer,21); ftp->login(userName,passWord); } void MainWindow::on_cdToParentButton_clicked() { ui->fileList->clear(); isDirectory.clear(); currentPath=currentPath.left(currentPath.lastIndexOf('/')); if(currentPath.isEmpty()){ ui->cdToParentButton->setEnabled(false); ftp->cd("/"); }else{ ftp->cd(currentPath); } ftp->list(); } void MainWindow::on_downloadButton_clicked() { QDir *temp = new QDir; //获取QDir的地址,不是复制一个QDir //判断文件夹是否存在 bool exist = temp->exists("./download"); if(exist) QMessageBox::warning(this,tr("creat folder"),tr("The folder is exist!")); else { bool ok = temp->mkdir("./download"); //当文件夹不存在时进行创建 if(ok) QMessageBox::warning(this,tr("creat folder"),tr("Creat the folder successful")); } QString filename = ui->fileList->currentItem()->text(0); filename = "download\\"+filename; //文件保存在./download文件夹中 file = new QFile(filename); if(!file->open(QIODevice::WriteOnly)){ delete file; return ; } ui->downloadButton->setEnabled(false); ftp->get(ui->fileList->currentItem()->text(0),file); } #ifndef MAINWINDOW_H #define MAINWINDOW_H #include 
         
           #include 
          
            class QFtp; class QFile; class QUrlInfo; class QTreeWidgetItem; namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; QFtp *ftp; //存储一个路径是否为目录信息 QHash 
           
             isDirectory; //存储现在的路径 QString currentPath; //表示下载的文件 QFile *file; signals: private slots: void ftpCommandStarted(int); void ftpCommandFinished(int,bool); //更新进度条 void updateDataTransferProgress(qint64,qint64); //将服务器上的文件添加到Tree Widget部件中 void addToList(const QUrlInfo &urlInfo); //双击一个目录时显示其内容 void processItem(QTreeWidgetItem* , int); void on_connectButton_clicked(); void on_cdToParentButton_clicked(); void on_downloadButton_clicked(); }; #endif // MAINWINDOW_H 
            
           
          
         
       
      
      
     
     
    
    
   
   
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT---FTP练习,连接FTP服务器,浏览其中的文件,下载到本地目录中 的相关文章

  • C++ SQL 查询构建库

    我正在寻找一个提供与 c SelectQueryBuilder 库类似功能的 c 库 http www codeproject com Articles 13419 SelectQueryBuilder Building complex a
  • 在 Qt 中使用多个不同的流读取同一文件

    使用 Qt 是否可以使用多个流读取文件以同时访问其中的不同数据部分 请注意 Qt 中的流 QTextStream QDataStream 不处理底层设备中的位置 流类只是一个包装器 用于更轻松地解析设备 QFile 实例 内的二进制数据 因
  • QTableView 并双击一个单元格

    我正在开发测试用例编辑器 该编辑器包含 USART 传输和接收数据包格式 编辑器是一个表格视图 发送和接收数据包的长度为八个字节 例如 0x01 0x02 0x03 0x08 它在我的第五和第六栏中 现在 我希望此列中的单元格为只读 但是当
  • Qt中Q_PROPERTY的意义是什么?

    我无法理解 Q PROPERTY 的用法 Q PROPERTY 如何帮助程序具有防御性 它是干什么用的 我看过这个论坛 但确实无法应用 我已经理解了这个例子 但不明白它的用法 这是一个例子 我能从中得到什么 我知道阅读将赋予只读特权 wri
  • 覆盖 QWebView 中的页面回复

    我试图在 Qt 的 QWebView 中拦截页面 表单请求 并在某些情况下使用替代内容进行响应 QNetworkReply ngcBrowser createRequest Operation operation const QNetwor
  • 如何将自定义 Qt 类型与 QML 信号一起使用?

    我在 Qt 5 2 qml 应用程序中创建了一个自定义类型 class Setting public QObject Q OBJECT Q PROPERTY QString key READ key WRITE setKey Q PROPE
  • 连接到 QNetworkReply::error 信号

    我正在使用 Qt5 的新连接语法 QNetworkReply 有一个名为error http qt project org doc qt 5 0 qtnetwork qnetworkreply html error 2还有一个函数叫做err
  • 如何在Android中使用QML - QWebView

    我想在 Android 中部署一个 YouTube 应用程序 但它只能在我的电脑上运行 在安卓上不起作用 它不加载任何视频 问题仅出在 QWebView 上 我使用了与此类似的代码 http doc qt io archives qt 5
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 如何向 PyQt5 GUI 添加线程?

    所以我使用 QT Designer 创建了一个 GUI 它工作得很好 但在更复杂的调用中 它不会更新主窗口并锁定 我想运行我的CustomComplexFunction 在根据不断变化的后端信息更新主窗口中的文本编辑时 我希望它每 2 秒运
  • 是否可以根据 QSlider 的位置来改变其手柄的颜色?

    我非常清楚如何通过样式表自定义 QSlider 但我想知道是否可以执行以下操作 我希望滑块的手柄从蓝色变为黄色 当设置在左侧时 它是蓝色的 设置在左侧时 它是蓝色的 当你将它向右移动时 它会出现从蓝色到黄色的渐变 如果可以通过样式表 如何实
  • 使用 QNetworkAccessManager 的 Qt 控制台应用程序

    我正在尝试写一个Qt调用网络服务的应用程序 这是一个控制台应用程序 url 将作为命令行参数传入 我搜索了例如http程序在Qt并找到这个链接 http qt project org doc qt 5 qnetworkaccessmanag
  • Qt:将数字转换为 QString、QVariant 或 QString::number 哪个更好

    我只是好奇 比方说 我需要在控制台中输出一个数字 代码是 include
  • Qt - 如何使用 QNetworkAccessmanager 获取响应文本

    这是我的代码 Widget Widget manager new QNetworkAccessManager this connect manager SIGNAL finished QNetworkReply this SLOT repl
  • 使用 C++ 访问 Azure blob 存储 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • QByteArray 到整数

    正如您可能从标题中看出的那样 我在转换QByteArray为一个整数 QByteArray buffer server gt read 8192 QByteArray q size buffer mid 0 2 int size q siz
  • QT:模块“QtWebView”未安装

    我的操作系统是win10 QT版本是Qt5 7 mingw53 32 目标操作系统是win10 当我使用qmlscene执行qml文件时 发生了一些错误 qrc qml 3 模块 QtWebView 未安装 我的 qml 文件如下 impo
  • QML MouseArea 将事件传播到按钮

    我正在开发一个应用程序 其菜单类似于 Android 版 Gmail 收件箱应用程序菜单 基本上 当您按下按钮打开菜单时 它就会滑入视图 用户可以将其滑开或按菜单上的按钮 对于滑动我使用了代码SwipeArea from kovrov ht
  • 一个具有完全透明背景的qt小部件

    我需要创建一个 qt 小部件 它将充当其他一些小部件的父级 并对它们进行排序 现在的问题是如何使其背景完全透明 我想这样做 struct Imp Imp QWidget parent thisWidget new QWidget paren
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se

随机推荐

  • spring事务原理1

    spring 事务原理 传播机制 事务挂起 spring自带的JdbcTemplate使用示例 查询 public
  • websocket请求用自定义注解@WSRequestMapping访问,类似springmvc @RequestMapping访问。

    AnnoWebsocket websocket请求用自定义注解方式访问 类似于springmvc RequestMapping注解方式访问 源码github地址 https github com luxiangzhou AnnoWebsoc
  • 微信小程序getApp()和App()方法详解

    一 App App 是一个小程序的入口方法 写在app js文件里 开发时我们主要是把一些全局变量 全局方法放在App 里面 比如用户名 请求数据时的URL等 app js App onLaunch 展示本地存储能力 const logs
  • WY易盾cb、fp逆向分析

    内容仅供参考学习 欢迎朋友们V一起交流 zcxl7 7 目标 网址 案例地址 这个好像还没改版 我看官网体验那边已经进行了混淆 分析 这个进行的请求很乱 我就不说怎么找的了 到时候越听越乱 一共有2个请求很重要 getConf这个请求返回了
  • 01-windows下载与安装neo4j

    1 因为neo4j的官网总是在变 所以下载地址有时候找不到 neo4j 3 1 0 Releases 官方下载链接 windows64 zip https neo4j com artifact php name neo4j communit
  • TCP/IP协议栈与数据包封装

    TCP IP协议栈与数据包封装 TCP IP网络协议栈分为应用层 Application 传输层 Transport 网络层 Network 和链路层 Link 四层 如下图所示 该图出自 TCPIP 图 36 1 TCP IP协议栈 两台
  • 【不是拷贝】rabbitmq安装延迟队列插件rabbitmq_delayed_message_exchange

    1 查看当前rabbitmq已安装的插件 查看当前的rabbitmq 安装了哪些插件 rabbitmq plugins list root yq test1 rabbitmq plugins list Configured E explic
  • SQL Server添加列及删除列

    SQL Server数据库添加列是我们经常要用到的操作 下文对SQL Server添加列的实现方法作了详尽的阐述 供您参考学习 AD SQL Server添加列的方法比较简单 下面就为您详细介绍SQL Server添加列及删除列的语句写法
  • “提升工作效率和多任务处理能力”,Microsoft Edge最新功能实测分享

    前言 Microsoft Edge浏览器是微软基于 Chromium 开源项目及其他开源软件开发的网页浏览器 Edge浏览器是一款现代化的浏览器 它拥有众多功能和强大的性能 为用户带来更加流畅的浏览体验 一 Edge浏览器的使用体验及优缺点
  • 华电保定计算机考研,华北电力大学(保定)计算机技术怎么样

    华北电力大学 保定 计算机技术怎么样 我们可以从以下几个方面来判断华北电力大学 保定 计算机技术怎么样 第一 华北电力大学 保定 计算机技术全国综合排名 根据浙华北电力大学 保定 计算机技术学科实力 教师水平 科研成果等多项指标 给华北电力
  • 强化学习笔记(4)-深度Q学习

    以下为学习 强化学习 原理与python实现 这本书的笔记 在之前学习到的强度学习方法中 每次更新价值函数只更新某个状态动作对的价值估计 但是有些情况下状态动作对的数量非常大 不可能对所有的状态动作对逐一更新 函数近似方法用参数化的模型来近
  • 网络协议详解:IP

    目录 两种IP地址 拆解IP地址 1 静态方式 2 动态方式 网络掩码 mask 求主机号和网络号 特殊IP地址 1 网络号 2 广播号 3 环回地址 4 内网地址 公网地址 关系 概念图 专门给内网使用的地址 同一网络的IP地址不可重复
  • Python学习-----起步2(变量与转义符)

    目录 前言 Python变量 常量使用规则 基本数据变量类型 整形 int 浮点型 float 字符串类型 str 布尔类型 bool 转义符 习题 前言 在我们学习C语言时 我们学了很多种类型的变量 有int char float dou
  • JDK版本导致Unsupported major.minor version 52.0 error

    出现问题原因 gt gt 分析 JDK版本不一致的问题 在eclipse中开发的项目有个Java build path中可以配置的JDK java compiler中可以配置compiler level eclipse gt windows
  • Docker客户端的常用命令

    搬运地址 启动Docker systemctl start docker 帮助命令 docker版本 docker version docker信息 docker info 帮助文档 docker help 此命令会列出所有Docker命令
  • Vue 中渲染字符串形式的组件标签

    在vue中如果要渲染字符串形式的标签 vue 提供了 v html 指令 可以很方便的渲染出来 但是如果这个标签是一个组件 或者element ui 的组件时 就不能解析出来了 因为v html 只能解析原生的属性 那么就要使用jsx渲染来
  • VS2005发布网站时生成的DLL名称问题

    VS2005发布网站时不会像VS2003一样生成规则的DLL文件 而生成的DLL文件名含有随机数且不能一个项目生成一个DLL文件 让人有一些遗憾 为了做到像vs2003一样 微软发布了WebDeployment Project插件可解决此问
  • 【STM32】端口复用和重映像

    作者 一只大喵咪1201 专栏 STM32学习 格言 你只管努力 剩下的交给时间 端口复用和重映像 描述 端口复用 端口复用的配置过程 端口重映像 部分重映像和完全重映像 重映像的配置过程 总结 描述 先来看一张STM32的简易结构图 在图
  • 程序员须学计算机语言,IT程序员入门必须要学会的是什么?

    IT程序员入门必须要学会的是什么 入门需要具备一定的英语基础 计算机体系结构和汇编语言 计算机操作系统原理 数据结构和算法 软件工程 Windows程序设计等相关知识点 一 具备一定的英语基础 对于初级程序员来说 英语只需要写简单的词汇就可
  • QT---FTP练习,连接FTP服务器,浏览其中的文件,下载到本地目录中

    include mainwindow h include ui mainwindow h include include include include include MainWindow MainWindow QWidget paren