我在主窗口代码中有循环,这只是改变屏幕上某些文本框的颜色。
它只是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%
答案 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
非常快,人眼无法捕捉如此快速的变化。尝试使用更长的值。