• 12800阅读
  • 10回复

[提问]QprogressBar怎么显示读取文件进度? [复制链接]

上一主题 下一主题
离线sun3004
 

只看楼主 倒序阅读 楼主  发表于: 2012-06-12
关键词: QprogressBar
QString _filename ="/Users/gazhao/Desktop/TestImportData/owxsyn.dat";  
if (!QFile::exists(_filename))      
  return;    QFile file(_filename);  
  if (!file.open(QFile::ReadOnly))      
return;
   ui->progressBar->setMinimum(0);  
  ui->progressBar->setMaximum(100);  
  ui->progressBar->setValue(0);  
QTextStream in(&file);  
int tsize = file.size();
  int p = 0;    
while (!in.atEnd()) {  
     ui->textBrowser->append(in.readLine());  
     p = (in.pos()/tsize)*100;  
    ui->progressBar->setValue(p);    
    }
为啥是等数据读完才一次性的显示文本和进度条滚动到最后,请教,谢谢!
离线XChinux

只看该作者 1楼 发表于: 2012-06-12
ui->progressBar->setValue(p);    
QApplication::processEvents();

这样试试看.
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线shiziyang

只看该作者 2楼 发表于: 2012-06-13
不开线程做界面会block住,试试开线程吧
离线jdwx

只看该作者 3楼 发表于: 2012-06-13
就一个线程,肯定会这样,Qt的进度条反应慢,MFC不会很卡,但是也卡。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线xiongyu

只看该作者 4楼 发表于: 2012-06-13
  我是这样做的, 先把指针从头跳到尾, 获取偏移量 y。
然后开线程计算读到多少了x,  然后不断刷新 进度条的值

ui->progressBar->setValue(x/y);  
为自己而已努力吧... 我的博客 http://xycode.org
离线jdwx

只看该作者 5楼 发表于: 2012-06-13
引用第4楼xiongyu于2012-06-13 12:51发表的  :
[表情]  我是这样做的, 先把指针从头跳到尾, 获取偏移量 y。
然后开线程计算读到多少了x,  然后不断刷新 进度条的值
ui->progressBar->setValue(x/y);    

就是这样,本身没难度。
是进度条反应慢导致的。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线sun3004

只看该作者 6楼 发表于: 2012-06-13
指针还用跳到结尾吗,直接用file.size()不行吗。
离线roywillow

只看该作者 7楼 发表于: 2012-06-13
如果觉得子类化QThread有些麻烦,可以看看QtConcurrent的文档是不是有帮助
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线sun3004

只看该作者 8楼 发表于: 2012-06-15
通过子类化QThread解决了,但是读大数据文件时,加进度条与不加进度条的读取速度相差老远了,加进度条后通过发送读取文件位置更新进度条值,发现读取完文件时间用了相当久,不加进度条的话会快好几倍,现在还没想到怎么解决呢。
离线fish0619

只看该作者 9楼 发表于: 2012-06-17
回 楼主(sun3004) 的帖子
不要每次读到数据就更新进度条。可以读一整块,比如8M字节的数据之后才去更新进度条。另外,你这段代码可以直接设置maximumValue为文件的长度,每次setValue()是已读数据的总数。
离线jdwx

只看该作者 10楼 发表于: 2012-06-17
进度条本身就是100,读文件之后判断进度增加超过1%更新,不超过不更新。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
快速回复
限100 字节
 
上一个 下一个