资源简介
实现注册登录,传文件,程序与测试过可以完美运行,适合新手当作练习小项目。
代码片段和文件信息
#include “filecntdlg.h“
#include “ui_filecntdlg.h“
FileCntDlg::FileCntDlg(QWidget *parent) :
QDialog(parent)
ui(new Ui::FileCntDlg)
{
ui->setupUi(this);
myCntSocket = new QTcpSocket(this);
mySrvPort = 5555;
connect(myCntSocket SIGNAL(readyRead()) this SLOT(readChatMsg()));
myFileNameSize = 0;
myTotalBytes = 0;
myRcvedBytes = 0;
}
FileCntDlg::~FileCntDlg()
{
delete ui;
}
void FileCntDlg::createConnToSrv()
{
myBlockSize = 0;
myCntSocket->abort();
myCntSocket->connectToHost(mySrvAddr mySrvPort);
mytime.start();
}
void FileCntDlg::readChatMsg()
{
QDataStream in(myCntSocket);
in.setVersion(QDataStream::Qt_5_14);
float usedTime = mytime.elapsed();
if (myRcvedBytes <= sizeof(qint64)*2)
{
if((myCntSocket->bytesAvailable() >= sizeof(qint64)*2) && (myFileNameSize == 0))
{
in >> myTotalBytes >> myFileNameSize;
myRcvedBytes += sizeof(qint64)*2;
}
if((myCntSocket->bytesAvailable() >= myFileNameSize) && (myFileNameSize != 0))
{
in >> myFileName;
myRcvedBytes += myFileNameSize;
myLocPathFile->open(QFile::WriteOnly);
ui->le_rfilename->setText(myFileName);
} else {
return;
}
}
if(myRcvedBytes < myTotalBytes)
{
myRcvedBytes += myCntSocket->bytesAvailable();
myInputBlock = myCntSocket->readAll();
myLocPathFile->write(myInputBlock);
myInputBlock.resize(0);
}
ui->recvProgressBar->setMaximum(myTotalBytes);
ui->recvProgressBar->setValue(myRcvedBytes);
double transpeed = myRcvedBytes / usedTime; //此为毫秒速度
ui->le_rsizefile->setText(tr(“%1“).arg(myTotalBytes / (1024 * 1024)) + “ MB“); //填写文件大小栏
ui->le_recvsize->setText(tr(“%1“).arg(myRcvedBytes / (1024 * 1024)) + “ MB“); //填写已接收栏
ui->rateLabel->setText(tr(“%1“).arg(transpeed * 1000 / (1024 * 1024) 0 ‘f‘ 2) + “ MB/秒“); //计算并显示传输速率
if(myRcvedBytes == myTotalBytes)
{
myLocPathFile->close();
myCntSocket->close();
ui->rateLabel->setText(“接收完毕!“);
}
}
void FileCntDlg::getLocPath(QString lpath)
{
myLocPathFile=new QFile(lpath);
}
void FileCntDlg::getSrvAddr(QHostAddress saddr)
{
mySrvAddr=saddr;
createConnToSrv();
}
void FileCntDlg::on_btn_cntclose_clicked()
{
myCntSocket->abort();
myLocPathFile->close();
close();
}
void FileCntDlg::closeEvent(QCloseEvent *)
{
on_btn_cntclose_clicked();
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2700 2020-02-27 10:25 filecntdlg.cpp
文件 1388 2020-02-22 17:19 filecntdlg.h
文件 4134 2020-02-24 23:15 filecntdlg.ui
文件 3587 2020-03-19 10:42 filesrvdlg.cpp
文件 1581 2020-02-23 09:49 filesrvdlg.h
文件 3875 2020-02-24 23:15 filesrvdlg.ui
目录 0 2020-02-21 14:08 images\
文件 22584 2020-02-21 14:05 images\tubiao.jpg
文件 3931136 2018-08-28 23:52 libmysql.dll
文件 24322 2018-08-28 23:52 libmysql.lib
文件 1850 2020-02-24 21:46 logindialog.cpp
文件 617 2020-02-24 16:31 logindialog.h
文件 2825 2020-02-24 16:51 logindialog.ui
文件 438 2020-02-24 17:22 main.cpp
文件 6301 2020-03-05 16:45 mainwindow.cpp
文件 1860 2020-02-27 10:25 mainwindow.h
文件 4731 2020-02-24 23:02 mainwindow.ui
文件 101 2020-02-21 14:08 picture.qrc
文件 178544 2020-01-24 01:00 qsqlpsql.dll
文件 1626 2020-02-24 16:31 regiestdialog.cpp
文件 421 2020-02-21 17:21 regiestdialog.h
文件 1953 2020-02-24 16:51 regiestdialog.ui
文件 1387 2020-02-24 16:57 WeChat.pro
文件 60340 2020-03-19 14:53 WeChat.pro.user
相关资源
- Qt中国象棋项目 毕业设计
- qt的各个版本和qt-vs-addin各个版本的链
- qt用QCustomPlot实现鼠标实时回调xy轴数
- 桌面精灵桌面精灵桌面精灵
- 基于 QT5 百度语音API 图灵机器人API 的
- vert.x结合springboot开发mqtt服务,真实可
- QT实现视频监控开发画面分割
- qt usb通信
- 关于QT的数字时钟含闹钟
- 基于v4l2的qt视频实时显示
- Qt5.4编写的图书管理系统
- qt通讯录实验
- QT5.5 动态刷新tabview
- DynamicChart.zip
- 基于Qt的以串口接收的温度显示界面,
- QT项目添加外部库详细步骤和
- TMS MQTT_v1.1.0.2.rar
- testRoll.7z
- Qt输入法事件 QInputMethodEvent
- QT简易画板
- 5个qt多线程
- QT 扫雷程序
- QT实现的类似QComplater可自定义匹配规
- QT5.5.1串口实现在线热拔插检测
- Qt编写的网络五子棋
- 原创 qt 组播实现的屏幕共享程序
- PyQt5高阶界面控件
- QT读取Txt文件并显示在界面上完整版
- 用QT实现的表格编辑器
- Qt Quick自定义下拉框
评论
共有 条评论