当前位置:   article > 正文

QProgressBar进度条显示文件传输进度_qt中怎么让qprogressbar显示发送文件的大小状态

qt中怎么让qprogressbar显示发送文件的大小状态

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

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

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

先在线程当中发送文件的大小到主进程,通过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());       //发送每次按行读取的数据和数据大小
        }
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

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);      //更新进度条
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/264330
推荐阅读
相关标签
  

闽ICP备14008679号