• 7644阅读
  • 5回复

QProgressDialog的延时进度条 [复制链接]

上一主题 下一主题
离线wangvance
 

只看楼主 倒序阅读 楼主  发表于: 2010-09-02
— 本帖被 XChinux 执行加亮操作(2010-09-02) —
    刚学QT,对QProgressDialog不是很熟悉。在运用中进度条走一格,延时一下,再走。我采用了
for (int i=1; i<101; i++)
{
    progressDialog->setValue(i);


    qApp->processEvents();
    QWaitCondition sleep;
    QMutex mutex;
    mutex.lock();
    sleep.wait(&mutex, 500);
    mutex.unlock();
}
但出来的,进度条是走了10%左右,才显示出进度,是一段一段的出来,不是1%的递增。不知道是不是我的 延时设置的有误,希望大侠指点。还有我不想用QTEST。多谢。
离线dbzhang800

只看该作者 1楼 发表于: 2010-09-02
    
qApp->processEvents();
    QWaitCondition sleep;
    QMutex mutex;
    mutex.lock();
    sleep.wait(&mutex, 500);
    mutex.unlock();


说实话,我完全搞不懂这段代码的意图是什么 ^_^
 * 首先,你这个应该不是多线程程序,为何用 mutex?用它来延时??
 * 其次,主线程不应该用任何sleep 类的函数。(从名字看,你想用它模拟出一个 sleep() ?)
 * 或许,你想找 QTimer ?
离线wangvance

只看该作者 2楼 发表于: 2010-09-02
这是个延时函数 ,但是我觉得不好用。QTimer,我知道。但是用QTimer * timer =new QTimer (this);
time->start(500);代替那段的话,进度条一下子就过去了,1秒都不到 好像没起到延时作用。你有什么好的提议吗?
离线dbzhang800

只看该作者 3楼 发表于: 2010-09-02
引用第2楼wangvance于2010-09-02 14:39发表的  :
这是个延时函数 ,但是我觉得不好用。QTimer,我知道。但是用QTimer * timer =new QTimer (this);
time->start(500);代替那段的话,进度条一下子就过去了,1秒都不到 好像没起到延时作用。你有什么好的提议吗?

1. 主线程加延时,本身就是错误的,(你让主线程sleep,程序不(假)死才怪)
2. 从你描述看,你还不会用QTimer,建议多看看看Qt自带的manual或例子
离线wangvance

只看该作者 4楼 发表于: 2010-09-02
哦,那我继续看看help吧,多谢你的讲解
离线wangvance

只看该作者 5楼 发表于: 2010-09-02
还是有问题,进度条还是一段一段的走,并不是1%,一点一点的在长。有什么原因吗
快速回复
限100 字节
 
上一个 下一个