Qt - 简单循环的执行逐渐减慢

时间:2014-12-14 10:00:23

标签: c++ qt qwidget qtimer

我在主窗口代码中有循环,这只是改变屏幕上某些文本框的颜色。 它只是for(int i=0; i<200; i++),但我想让用户可以看到 每个颜色变化 ,所以在循环内我尝试过添加......就像 10ms暂停一样,所以每次执行都在屏幕上可见。

我用过这个:

      QTimer t;
      t.start(10);
      QEventLoop loop;
      connect(&t, SIGNAL(timeout()), &loop, SLOT(quit()));
      loop.exec();

问题是,我希望不断有 10ms步伐,所以整个操作大约需要2秒钟。不幸的是,它逐渐减慢,如此艰难,最后~20次执行甚至大约需要1秒

当我<20~50时,看起来相当不错,增加更多会使它显着减慢......

我想过我的不是真正全新的 PC,但操作真的很简单,所以我真的不这么认为是因为我的电脑很慢。 我认为我的方法是错误的


PS。在执行期间,我的应用的ram usage约为 ~21MB cpu约为 20-30%

1 个答案:

答案 0 :(得分:2)

实现目标不是好方法。 QTimer足以完成这项任务。例如:

 QTimer *t = new QTimer;//without loops and sleeping
 connect(t, SIGNAL(timeout()), this, SLOT(someSlot()));
 t->start(10);

创建someSlot并在此广告位中更改颜色并执行其他任务。要在2秒后停止计时器,您可以使用计数器而不是使用系统时间。

void MainWindow::someSlot()
{
    //do something
}

还要考虑10 ms非常快,人眼无法捕捉如此快速的变化。尝试使用更长的值。