Qt延时函数分为两大类,一类是阻塞当前线程,另一类是不阻塞当前线程。
一,阻塞当前线程
1,使用QElapsedTimer
头文件:#include <QElapsedTimer>
void Widget::delay_3(int msec)
{
QElapsedTimer t;
t.start();
while(t.elapsed()<msec);
}
2,
void Widget::delay_4(int mesc)
{
QThread::msleep(mesc);
//QThread::usleep()
//QThread::sleep()
}
二,不阻塞当前线程
1,自定义延时函数:
使用QEventLoop。如果去掉QCoreApplication::processEvents(QEventLoop::AllEvents, 100); 可以延时,但也会阻塞线程
QCoreApplication::processEvents(QEventLoop::AllEvents, 100); 使程序在while等待期间,去处理一下本线程的事件循环,处理事件循环最多100ms必须返回本语句,如果提前处理完毕,则立即返回这条语句。
void Widget::delay_2(int msec)
{
QTime dieTime = QTime::currentTime().addMSecs(msec);
while( QTime::currentTime() < dieTime )
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
2,建子事件循环,在子事件循环中,父事件循环仍然是可以执行的
void Widget::delay_1(int msec)
{
QEventLoop loop;//定义一个新的事件循环
QTimer::singleShot(msec, &loop, SLOT(quit()));//创建单次定时器,槽函数为事件循环的退出函数
loop.exec();//事件循环开始执行,程序会卡在这里,直到定时时间到,本循环被退出
}
参考:https://blog.csdn.net/qq_40194498/article/details/80063960
关注微信,以免错过更多精彩内容: