怎么用QT制作一个简易的传输文件小工具
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容主要讲解"怎么用QT制作一个简易的传输文件小工具",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么用QT制作一个简易的传输文件小工具"吧!先看下效
千家信息网最后更新 2026年11月03日怎么用QT制作一个简易的传输文件小工具
本篇内容主要讲解"怎么用QT制作一个简易的传输文件小工具",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么用QT制作一个简易的传输文件小工具"吧!
先看下效果图
可以看到既可以接受文件也可进行发送文件,只要2台电脑在统一局域网内,就可发送和接受数据。

本地文件下出现了一份传输的文件。
直接看代码
.h
#ifndef WIDGET_H#define WIDGET_H#include#include #include #include #include #include #include #include class Widget : public QWidget{ Q_OBJECTpublic: Widget(QWidget *parent = nullptr); ~Widget(); void Init();private slots: void onTcpConnected(); void onConnectClicked(); void ServerNewConnect(); void SocketReadData(); void onOpenFileClicked(); void onSendClicked(); void updateClientProgress(qint64 numBytes);private: QPushButton *m_pConnectBtn=nullptr; QLineEdit *m_pIpAddressEdit=nullptr; QLineEdit *m_pPortEdit=nullptr; QWidget *m_pTitleWgt=nullptr; QLineEdit *m_pFilePathEdit=nullptr; QPushButton *m_pOpenFileBtn=nullptr; QPushButton *m_pSendBtn=nullptr; QTextEdit *m_pTextEdit=nullptr; QProgressBar *m_pReceiverBar=nullptr; QProgressBar *m_pSendBar=nullptr; QTcpSocket *m_pTcpSocket=nullptr; QTcpServer *m_pTcpServer=nullptr; QTcpSocket *m_pTcpServerSocket=nullptr; //------receiver qint64 m_bytesReceived; qint64 m_fileNameSize; qint64 m_totalBytes; QString m_fileName; QFile *m_localFile; QByteArray m_inBlock; //send QFile *m_ClientlocalFile; QString m_ClientfileName; qint64 m_ClienttotalBytes; qint64 m_ClientbytesWritten=0; qint64 m_ClientbytesToWrite; qint64 m_ClinetpayloadSize; QByteArray m_ClientoutBlock;};#endif // WIDGET_H
.cpp
#include "widget.h"#include#include #include #include #include Widget::Widget(QWidget *parent) : QWidget(parent){ this->resize(800,600); Init(); m_pTcpSocket=new QTcpSocket(this); connect(m_pTcpSocket,&QTcpSocket::connected,this,&Widget::onTcpConnected); //若连接成功,则触发此信号 connect(m_pTcpSocket,SIGNAL(bytesWritten(qint64)),this,SLOT(updateClientProgress(qint64))); //发送数据 m_pTcpServer=new QTcpServer(this); m_totalBytes=0; m_bytesReceived=0; m_fileNameSize=0; connect(m_pTcpServer,&QTcpServer::newConnection,this,&Widget::ServerNewConnect); if(!m_pTcpServer->listen(QHostAddress::Any, 2021)) //端口为2021 { QMessageBox::warning(this,"Warning",m_pTcpServer->errorString(),QMessageBox::Ok); return; }}Widget::~Widget(){}void Widget::Init(){ m_pConnectBtn=new QPushButton(tr("Connect"),this); m_pIpAddressEdit=new QLineEdit(this); m_pPortEdit=new QLineEdit(this); m_pPortEdit->setValidator(new QIntValidator()); m_pTitleWgt=new QWidget(this); m_pIpAddressEdit->setFixedWidth(200); m_pPortEdit->setFixedWidth(200); m_pConnectBtn->setFixedSize(100,25); QLabel *ipLabel=new QLabel(tr("IpAddress:"),this); QLabel *portLabel=new QLabel(tr("Port:"),this); ipLabel->setFixedWidth(60); portLabel->setFixedWidth(40); QHBoxLayout *titleLayout=new QHBoxLayout(this); titleLayout->addWidget(ipLabel); titleLayout->addWidget(m_pIpAddressEdit); titleLayout->addWidget(portLabel); titleLayout->addWidget(m_pPortEdit); titleLayout->addWidget(m_pConnectBtn); titleLayout->setMargin(5); titleLayout->setSpacing(10); titleLayout->addStretch(); m_pTitleWgt->setFixedHeight(40); m_pTitleWgt->setLayout(titleLayout); m_pIpAddressEdit->setText("192.168.2.110"); m_pPortEdit->setText("2021"); m_pPortEdit->setEnabled(false); m_pFilePathEdit=new QLineEdit(this); m_pOpenFileBtn=new QPushButton(tr("Open File"),this); m_pSendBtn=new QPushButton(tr("Send")); m_pFilePathEdit->setFixedWidth(500); m_pOpenFileBtn->setFixedSize(100,25); m_pSendBtn->setFixedSize(100,25); m_pSendBtn->setEnabled(false); QWidget *bottomWgt=new QWidget(this); QHBoxLayout *bottomLayout=new QHBoxLayout(this); bottomLayout->addWidget(m_pFilePathEdit); bottomLayout->addWidget(m_pOpenFileBtn); bottomLayout->addWidget(m_pSendBtn); bottomLayout->setMargin(5); bottomLayout->setSpacing(5); bottomLayout->addStretch(); bottomWgt->setLayout(bottomLayout); m_pTextEdit=new QTextEdit(this); QLabel *receiverLabel=new QLabel(tr("Receiver Speed"),this); QLabel *SendLabel=new QLabel(tr("Send Speed"),this); receiverLabel->setFixedWidth(100); SendLabel->setFixedWidth(100); m_pReceiverBar=new QProgressBar(this); m_pSendBar=new QProgressBar(this); m_pReceiverBar->setFixedSize(300,30); m_pSendBar->setFixedSize(300,30); m_pReceiverBar->setOrientation(Qt::Horizontal); m_pSendBar->setOrientation(Qt::Horizontal); QWidget *receiverBarWgt=new QWidget(this); QHBoxLayout *receiverBarLayout=new QHBoxLayout(this); receiverBarLayout->addWidget(receiverLabel); receiverBarLayout->addWidget(m_pReceiverBar); receiverBarLayout->addStretch(); receiverBarLayout->setSpacing(5); receiverBarWgt->setLayout(receiverBarLayout); QWidget *sendBarWgt=new QWidget(this); QHBoxLayout *sendBarLayout=new QHBoxLayout(this); sendBarLayout->addWidget(SendLabel); sendBarLayout->addWidget(m_pSendBar); sendBarLayout->addStretch(); sendBarLayout->setSpacing(5); sendBarWgt->setLayout(sendBarLayout); connect(m_pConnectBtn,&QPushButton::clicked,this,&Widget::onConnectClicked); connect(m_pOpenFileBtn,&QPushButton::clicked,this,&Widget::onOpenFileClicked); connect(m_pSendBtn,&QPushButton::clicked,this,&Widget::onSendClicked); QVBoxLayout *mainLayout=new QVBoxLayout(this); mainLayout->addWidget(m_pTitleWgt); mainLayout->addWidget(bottomWgt); mainLayout->addWidget(receiverBarWgt); mainLayout->addWidget(sendBarWgt); mainLayout->addWidget(m_pTextEdit); mainLayout->setMargin(0); mainLayout->addStretch(); this->setLayout(mainLayout);}void Widget::onTcpConnected(){ m_pTextEdit->append("Connect Server Success!");}void Widget::onConnectClicked(){ QString strip=m_pIpAddressEdit->text(); QString strport=m_pPortEdit->text(); if(strip!=""&&strport!="") { m_pTcpSocket->connectToHost(strip,strport.toInt()); //请求连接 } else { QMessageBox::warning(this,"Warning","IpAddress or Port is Null",QMessageBox::Ok); }}void Widget::ServerNewConnect(){ m_pTcpServerSocket = m_pTcpServer->nextPendingConnection(); //服务端接受消息 QObject::connect(m_pTcpServerSocket, &QTcpSocket::readyRead, this, &Widget::SocketReadData); m_pTextEdit->append("Connect Client Success");}void Widget::SocketReadData(){ QDataStream in(m_pTcpServerSocket); in.setVersion(QDataStream::Qt_5_11); if (m_bytesReceived<=sizeof(qint64)*2){ if((m_pTcpServerSocket->bytesAvailable()>=sizeof(qint64)*2)&&(m_fileNameSize==0)){ in>>m_totalBytes>>m_fileNameSize; m_bytesReceived +=sizeof(qint64)*2; } if((m_pTcpServerSocket->bytesAvailable()>=m_fileNameSize)&&(m_fileNameSize!=0)){ in>>m_fileName; m_bytesReceived+=m_fileNameSize; m_localFile = new QFile(m_fileName); if (!m_localFile->open(QFile::WriteOnly)){ qDebug() << "server: open file error!"; return; } } else{ return; } } if(m_bytesReceived bytesAvailable(); m_inBlock = m_pTcpServerSocket->readAll(); m_localFile->write(m_inBlock); m_inBlock.resize(0); } m_pReceiverBar->setMaximum(m_totalBytes); m_pReceiverBar->setValue(m_bytesReceived); if (m_bytesReceived==m_totalBytes){ m_localFile->close(); QString strSuccess=QString("File %1 ReceiverSucess").arg(m_fileName); m_pTextEdit->append(strSuccess); m_pTcpServerSocket->close(); m_totalBytes=0; m_bytesReceived=0; m_fileNameSize=0; }}void Widget::onOpenFileClicked(){ QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "/home", tr("File (*.*)")); if(fileName!="") { m_ClientfileName=fileName; m_pSendBtn->setEnabled(true); m_pFilePathEdit->setText(fileName); }}void Widget::onSendClicked(){ m_ClientoutBlock.clear(); m_ClientlocalFile=new QFile(m_ClientfileName); if(!m_ClientlocalFile->open(QFile::ReadOnly)){ qDebug()<<"client:open file error!"; return; } m_ClienttotalBytes=m_ClientlocalFile->size(); QDataStream sendOut(&m_ClientoutBlock,QIODevice::WriteOnly); sendOut.setVersion(QDataStream::Qt_5_11); QString currentFileName=m_ClientfileName.right(m_ClientfileName.size()-m_ClientfileName.lastIndexOf('/')-1); sendOut< seek(0); sendOut< write(m_ClientoutBlock); m_ClientoutBlock.resize(0);}void Widget::updateClientProgress(qint64 numBytes){ m_ClientbytesWritten+=(int)numBytes; if(m_ClientbytesToWrite>0){ m_ClientoutBlock=m_ClientlocalFile->read(qMin(m_ClientbytesToWrite,m_ClinetpayloadSize)); m_ClientbytesToWrite-=(int)m_pTcpSocket->write(m_ClientoutBlock); m_ClientoutBlock.resize(0); } else{ m_ClientlocalFile->close(); } m_pSendBar->setMaximum(m_ClienttotalBytes); m_pSendBar->setValue(m_ClientbytesWritten); if(m_ClientbytesWritten==m_ClienttotalBytes){ QString sendSuccess=QString("Send File %1 Success").arg(m_fileName); m_pTextEdit->append(sendSuccess); m_ClientlocalFile->close(); m_pTcpSocket->close(); m_ClientbytesWritten=0; }}
到此,相信大家对"怎么用QT制作一个简易的传输文件小工具"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
文件
传输
工具
简易
制作
内容
数据
学习
实用
更深
成功
代码
兴趣
实用性
实际
局域
局域网
操作简单
效果
效果图
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
科技互联网产品
互联网科技深圳
金融科技与互联网金融
互联网金融 科技金融
以房互联网科技
互联网科技排名
浩特互联网科技
互联网科技咨询
互联网大会黑科技排名
移动互联网年度科技创新
用友工业互联网科技发展
互联网科技公司营业执照怎么办理
烟台灵鸽互联网科技有限公司
高科技互联网套路
宇信科技在杭州互联网排第几
萌小萌互联网科技河南有限公司
全球科技与互联网公司市值变化
北京天晋互联网科技有限公司
数字互联网科技有限公司
互联网高科技绘画
为想互联网科技
友谊互联网络科技
苏州大垚互联网科技
知域互联网科技有限公司大骗子
群盈汇互联网科技有限公司
广州富喜互联网络科技
互联网科技包装股
全球科技与互联网公司市值变化
数字科技和互联网金融哪个好
伍佰万互联网科技是干嘛的