在MFC中使用延时最多的是使用类似Sleep(5)这种写法,然而在Qt中的使用就没这么简单了,我这里编写我这常用的写法
代码如下:
头文件
//非阻塞式的延时ms
void QCOMMONHELP_EXPORT SleepMsec(int msec);
void QCOMMONHELP_EXPORT SleepMsec1(int msec);
//阻塞式的延时ms
void QCOMMONHELP_EXPORT SleepMsecSuspend(int msec);
void QCOMMONHELP_EXPORT SleepMsecSuspend1(int msec);
//获取当前时间戳 单位为ms
qint64 QCOMMONHELP_EXPORT GetCurTime();
源文件
//非阻塞式的延时
void QCOMMONHELP_EXPORT SleepMsec(int msec)
{
QTime curTimer = QTime::currentTime().addMSecs(msec);
while (QTime::currentTime() < curTimer)
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
void QCOMMONHELP_EXPORT SleepMsec1(int msec)
{
QEventLoop loop;//定义一个新的事件循环
QTimer::singleShot(msec, &loop, SLOT(quit()));//创建单次定时器,槽函数为事件循环的退出函数
loop.exec();//事件循环开始执行,程序会卡在这里,直到定时时间到,本循环被退出
}
//阻塞式的延时
void QCOMMONHELP_EXPORT SleepMsecSuspend(int msec)
{
QTime curTimer = QTime::currentTime();
QTime nowTimer;
do
{
nowTimer = QTime::currentTime();
} while (curTimer.msecsTo(nowTimer) <= msec);
}
void QCOMMONHELP_EXPORT SleepMsecSuspend1(int msec)
{
QElapsedTimer t;
t.start();
while (t.elapsed() < msec);
}
//获取当前时间戳
qint64 QCOMMONHELP_EXPORT GetCurTime()
{
//获取当前时间
QDateTime dateTime = QDateTime::currentDateTime();
// 字符串格式化
QString timestamp = dateTime.toString("yyyy-MM-dd hh:mm:ss.zzz");
// 获取毫秒值
int ms = dateTime.time().msec();
// 转换成时间戳 ms
qint64 epochTime = dateTime.toMSecsSinceEpoch();
return epochTime;
}
我这里写了两种,一种是阻塞式的,一种是非阻塞式的,特别注意的是非阻塞式主要是为了当前延时时其他地方不必要卡死,阻塞式的就是在当前位置一直等待直到延时结束
上面还有一个获取当前时间戳的函数,特别注意的是单位为ms,返回值是qint64,也就是long long类型的,也就是当当前的时间直接转化成数字返回,各位朋友可以试一试,而在MFC中使用的就是GetTickCount(),它的返回值类型则是long。所以从MFC转成Qt,很多写法都要跟着改变
原文 https://mp.weixin.qq.com/s/rhlpE_qhW2nUqbvKdVEGrg