赞
踩
由于在写自己的串口收发工具时,有写到发送文件的功能,因此希望通过进度条来显示当前传送文件的进度。
文件的大小读取和数据读取在线程中,使用信号和槽发送到主进程,更新到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); //更新进度条 } }
效果图
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。