您的位置:首页 > 房产 > 家装 > 店铺设计包含哪些内容_丢盖网logo设计免费官网_网站首页排名_杭州网站设计制作

店铺设计包含哪些内容_丢盖网logo设计免费官网_网站首页排名_杭州网站设计制作

2025/4/21 5:19:37 来源:https://blog.csdn.net/qq_62435866/article/details/147229467  浏览:    关键词:店铺设计包含哪些内容_丢盖网logo设计免费官网_网站首页排名_杭州网站设计制作
店铺设计包含哪些内容_丢盖网logo设计免费官网_网站首页排名_杭州网站设计制作

Qt实现文件传输客户端

  • 1、 客户端UI界面设计
  • 2、客户端
  • 2.1 添加网络模块和头文件
  • 2.2 创建Tcp对象
  • 2.3 连接按钮
    • 2.3.1 连接按钮连接信号与槽
    • 2.3.2 连接按钮实现
  • 2.4 读取文件
  • 2.4.1 连接读取文件的信号与槽
  • 2.4.2 读取文件槽函数实现
  • 2.5 进度条
    • 2.5.1 设置进度条初始值
    • 2.5.2 初始化进度条
    • 2.5.3 更新进度条
  • 2.6 传输成功
  • 3、 头文件和.cpp文件
    • 3.1 头文件
    • 3.2 .cpp文件
  • 4、 仓库地址
  • 5、总结

记录自己对于Qt实现文件传输客户端的学习过程,方便自己日后回顾,也可以给别人提供参考借鉴。服务器端在主页另外一篇博客

1、 客户端UI界面设计

在这里插入图片描述

2、客户端

2.1 添加网络模块和头文件

在这里插入图片描述
在这里插入图片描述

2.2 创建Tcp对象

private:Ui::Widget *ui;QTcpSocket *tcpSocket;          //声明Tcp对象指针

在这里插入图片描述

tcpSocket = new QTcpSocket(this);       //创建客户端Tcp对象

在这里插入图片描述

2.3 连接按钮

2.3.1 连接按钮连接信号与槽

右键连接按钮,选择转到槽

在这里插入图片描述

选择clicked()

在这里插入图片描述

2.3.2 连接按钮实现

//连接按钮
void Widget::on_connectPushButton_clicked()
{QString ip = ui->ipLineEdit->text();      //获取ipquint16 port = ui->portLineEdit->text().toUInt();       //获取端口tcpSocket->connectToHost(ip,port);          //连接服务器
}

2.4 读取文件

2.4.1 连接读取文件的信号与槽

创建槽函数
void readFileHandle();                      //读取文件处理           

在这里插入图片描述

连接信号与槽
connect(tcpSocket,&QTcpSocket::readyRead,this,&Widget::readFileHandle);     //连接读取文件的信号与槽

在这里插入图片描述

2.4.2 读取文件槽函数实现

定义一个文件发送成功状态
bool isFileMes;        //文件读取信息

在这里插入图片描述

isFileMes = true;      //读取的是文件信息

在这里插入图片描述

创建文件所需对象,记得添加头文件
QFile file;                     //创建文件对象QString fileName;               //文件名字
qint64 fileSize;                //文件大小
qint64 recFileSize;           //接收文件大小

在这里插入图片描述

实现槽函数
//读取文件
void Widget::readFileHandle()
{QByteArray message = tcpSocket->readAll();          //接收信息if(isFileMes==true)//发送过来的是文件信息{//1、接收文件信息并拆包//hello##1024 拆包fileName = QString(message).section("##",0,0);        //获取文件名,hellofileSize = QString(message).section("##",1,1).toInt();        //获取文件大小,1024//2、创建文件设置为只写file.setFileName(fileName);       //创建文件bool isOpen = file.open(QIODevice::WriteOnly);if(isOpen == false){QMessageBox::warning(this,"打开文件","文件打开失败");tcpSocket->disconnectFromHost();        //断开连接tcpSocket->close();             //关闭}}else        //接收的是文件内容{qint64 length = file.write(message);recFileSize += length;if(recFileSize == fileSize){QMessageBox::information(this,"接收文件","接收文件完毕");}}
}

2.5 进度条

2.5.1 设置进度条初始值

ui->sendprogressBar->setValue(0);          //设置进度条初始值

2.5.2 初始化进度条

//初始化进度条
//初始化进度条
ui->sendprogressBar->setMaximum(100);     //设置进度条最大值,qint64->int
ui->sendprogressBar->setValue(0);               //设置当前值

2.5.3 更新进度条

//更新进度条
int progress = static_cast<int>((recFileSize * 100) / fileSize);
ui->sendprogressBar->setValue(progress);   

2.6 传输成功

在这里插入图片描述

3、 头文件和.cpp文件

3.1 头文件

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QTcpSocket>
#include <QFile>
#include <QMessageBox>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_connectPushButton_clicked();          //连接按钮void readFileHandle();                      //读取文件处理private:Ui::Widget *ui;QTcpSocket *tcpSocket;          //声明Tcp对象指针bool isFileMes;        //文件读取信息QFile file;                     //创建文件对象QString fileName;               //文件名字qint64 fileSize;                //文件大小qint64 recFileSize;           //接收文件大小};
#endif // WIDGET_H

3.2 .cpp文件

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//    this->setWindowFlag(Qt::FramelessWindowHint);       //去窗口this->setAttribute(Qt::WA_TranslucentBackground);   //半透明背景tcpSocket = new QTcpSocket(this);       //创建客户端Tcp对象isFileMes = true;      //读取的是文件信息ui->sendprogressBar->setValue(0);          //设置进度条初始值connect(tcpSocket,&QTcpSocket::readyRead,this,&Widget::readFileHandle);     //连接读取文件的信号与槽
}Widget::~Widget()
{delete ui;
}//连接按钮
void Widget::on_connectPushButton_clicked()
{QString ip = ui->ipLineEdit->text();      //获取ipquint16 port = ui->portLineEdit->text().toUInt();       //获取端口tcpSocket->connectToHost(ip,port);          //连接服务器
}//读取文件
void Widget::readFileHandle()
{QByteArray message = tcpSocket->readAll();          //接收信息if(isFileMes==true)//发送过来的是文件信息{//1、接收文件信息并拆包//hello##1024 拆包QString masgStr = QString::fromUtf8(message);fileName = masgStr.section("##",0,0);        //获取文件名,hellofileSize = masgStr.section("##",1,1).toLongLong();        //获取文件大小,1024//2、创建文件设置为只写file.setFileName(fileName);       //创建文件bool isOpen = file.open(QIODevice::WriteOnly);if(isOpen == false){QMessageBox::warning(this,"打开文件","文件打开失败");tcpSocket->disconnectFromHost();        //断开连接tcpSocket->close();             //关闭}//初始化进度条ui->sendprogressBar->setMaximum(100);     //设置进度条最大值,qint64->intui->sendprogressBar->setValue(0);               //设置当前值recFileSize = 0; // 重置接收文件大小isFileMes = false;      //转换标志}else        //接收的是文件内容{qint64 writelength = file.write(message);if(writelength != message.size()){QMessageBox::warning(this, "错误", "文件写入失败");file.close();tcpSocket->disconnectFromHost();return;}recFileSize += writelength;//更新进度条int progress = static_cast<int>((recFileSize * 100) / fileSize);ui->sendprogressBar->setValue(progress);   if(recFileSize == fileSize){QMessageBox::information(this, "成功", "文件接收完成");file.close();isFileMes = true; // 重置标志位,准备接收下一个文件tcpSocket->disconnectFromHost(); // 断开连接或保持连接根据需求}}
}

4、 仓库地址

代码仓库地址

5、总结

以上就是实现Qt实现文件传输客户端的整个过程了,服务端在另外一篇博客,浏览过程中,如若发现错误,欢迎

大家指正,有问题的可以评论区留言或者私信。最后,如果大家觉得有所帮助,可以点一下赞,谢谢大家!世界

扑朔迷离,愿我们保持冷静,继续前行!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com