QProgressBar进度条显示文件传输进度

本文介绍如何在Qt环境中,通过线程和信号槽机制实现文件传输的进度条实时显示。在子线程中读取文件大小并发送到主线程,设置进度条范围;随后按行读取文件数据,每次读取后更新进度条的值,从而在界面上动态展示文件发送的进度。
摘要由CSDN通过智能技术生成

由于在写自己的串口收发工具时,有写到发送文件的功能,因此希望通过进度条来显示当前传送文件的进度。

文件的大小读取和数据读取在线程中,使用信号和槽发送到主进程,更新到ui控件上。

connect(sendfile,&SendFile::SndfilesizeSignal,this,&MainWindow::Rcvfilesize);
connect(sendfile,&SendFile::SndfileSignal,this,&MainWindow::Rcvfiledata);

先在线程当中发送文件的大小到主进程,通过setRange设置进度条控件的范围,再按行读取并将每次按行读到数据大小发到主进程,通过setValue叠加设置当前进度条的值。

sendfile.cpp

//重写线程run方法
void SendFile::run()
{
    QFile myfile(sndFilepath);

    emit SndfilesizeSignal(myfile.size());      //发送文件大小

    if(myfile.open(QIODevice::ReadOnly))
    {
        while(!myfile.atEnd())      //当读到末尾
        {
            QThread::usleep(100);
            QByteArray data = myfile.readLine();        //按行读取文件

            emit SndfileSignal(data,data.size());       //发送每次按行读取的数据和数据大小
        }
    }

}

mainwindow.cpp

//接收线程发来的文件大小
void MainWindow::Rcvfilesize(int filesize)
{
    //qDebug()<< filesize;
    ui->FileSend_progressBar->setRange(0,filesize);         //设置进度条的范围
}



//接收线程每次发来的文件数据
void MainWindow::Rcvfiledata(QByteArray filedata,int fileline_size)
{
    if(isSerialState)
    {
        serial->write(filedata);

        progress_value += fileline_size;
        //qDebug()<< "progrss_value:" << progress_value <<",fileline_size:" << fileline_size;
        ui->FileSend_progressBar->setValue(progress_value);      //更新进度条
    }
}

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值