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

Qt - execution of simple loop is slowing down gradually

本文关键字:执行 简单 单循环 Qt      更新时间:2023-10-16

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

我用了这个:

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

问题是,我希望保持这个 10 毫秒的速度,所以整个操作大约需要 ~2 秒。不幸的是,它逐渐变慢,如此之难,以至于最后 ~20 次执行甚至需要大约 1 秒

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

我想到了我不是全新的PC,但它的操作非常简单,所以我真的不认为这是因为我的PC速度慢。我认为我的方法错了


附言。在执行过程中,我的应用程序的ram usage约为~21MB,cpu约为20-30%

这不是

实现某事的好方法。 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非常非常快,人眼无法捕捉到如此快的变化。尝试使用更长的值。