我们在Qt开发的时候有时会遇到这样的情况,在点击按钮后执行一系列任务,在这些任务中需要延时执行,如果直接Sleep的话会导致界面卡住无响应,此时我们就希望只在按钮点击事件的函数中堵塞延时执行操作,而不影响界面其他的操作。
//延时,直到延时结束
void MySleep(uint32_t ms)
{
QElapsedTimer timer;
timer.start();
QEventLoop loop;
while(timer.elapsed() < ms){
// 处理其他任务
loop.processEvents(QEventLoop::AllEvents);
}
}
//延时,支持接受一个bool型指针,当该bool参数变为true时提前退出延时,否则直到延时结束
void MySleep(uint32_t ms,bool *value){
QElapsedTimer timer;
timer.start();
QEventLoop loop;
while(timer.elapsed() < ms){
// 处理其他任务
loop.processEvents(QEventLoop::AllEvents);
if(*value == true){
break;
}
}
}