找回密码
 立即注册
收起左侧

关于进度条的问题

5
回复
8157
查看
[复制链接]
累计签到:14 天
连续签到:1 天
来源: 2013-7-23 10:45:34 显示全部楼层 |阅读模式
1Qter豆
//进度条
    int value = ui->spinBox->value();
    qDebug("spinBox %d",value);
    int time = value*60;
    QProgressDialog process(tr("开始工作..."),0,0,time,this);
    process.setWindowFlags(Qt::FramelessWindowHint);//隐藏标题栏
    process.show();
    process.move(800,300);
    for(int i=0;i<time;i++)
    {
     process.setValue(i);
     qApp->processEvents();
     QTest::qWait (1000 );
    }
    process.setValue(time);//显示100%
我用了spinBox设置进度条时间,假如我设置了18分钟,每循环一次休眠一秒,测试发现误差不是一般的大,请教如何更精确的控制进度条输出?

最佳答案

查看完整内容

Sleep后面的数据越小,精度越好。但cup利用率也越高 使用QThread里面的sleep函数就会导致误差很大
回复

使用道具 举报

尚未签到

2013-7-23 10:45:35 显示全部楼层
Sleep后面的数据越小,精度越好。但cup利用率也越高
使用QThread里面的sleep函数就会导致误差很大
回复

使用道具 举报

尚未签到

2013-7-23 11:43:02 显示全部楼层
QTest::qWait(1);
改成这样试试。
回复

使用道具 举报

累计签到:14 天
连续签到:1 天
2013-7-23 16:19:43 显示全部楼层
竞风 发表于 2013-7-23 11:43
QTest::qWait(1);
改成这样试试。

这个我试过了,时间误差是一样的,区别在于qsleep是阻塞的,qwait非阻塞
回复

使用道具 举报

尚未签到

2013-7-24 10:32:56 显示全部楼层
本帖最后由 竞风 于 2013-7-24 10:35 编辑

如果是windows平台,开始include <windows.h>和<QTime>用下面的方法计时误差不大
QTime intervalmeter;
intervalmeter.start();
while(intervalmeter.elapsed() < 1000)//等待一秒左右
{
    QCoreApplication::processEvents();
    Sleep(10);
}
回复

使用道具 举报

累计签到:14 天
连续签到:1 天
2013-7-24 15:34:26 显示全部楼层
竞风 发表于 2013-7-24 10:39
Sleep后面的数据越小,精度越好。但cup利用率也越高
使用QThread里面的sleep函数就会导致误差很大 ...

我用了土方法解决了精确问题,将设置的标准时间与实际时间差值考虑进qWait()中去比如一开始设置qWait(1000),计算出误差比例后,更改为qWait(990);这样问题也能解决。只不过设计完成后,要做误差校准 有点烦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了