1

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

我用这个:

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

问题是,我想一直保持这个10 毫秒的速度,所以整个操作大约需要 2 秒。不幸的是,它逐渐变慢,非常难,最后约 20 次处决甚至需要大约 1 秒

当 i<20~50 时它看起来相当不错,添加更多使其显着减慢......

我想到了我的不是全新的电脑,但操作起来真的很简单,所以我不认为这是因为我的电脑速度慢。我假设我的方法是错误的


PS。在执行期间,ram usage我的应用程序大约为~21MBcpu大约20-30%

4

1 回答 1

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是非常非常快,人眼无法捕捉到这么快的变化。尝试使用更长的值。

于 2014-12-14T10:04:52.560 回答