本文介绍几种Qt延时的方法,包括阻塞和非阻塞的。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimer>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::sleep(int msec)
{
if (msec <= 0) {
return;
}
#if 1
//非阻塞方式延时,推荐
QEventLoop loop;
QTimer::singleShot(msec, &loop, SLOT(quit()));
loop.exec();
#else
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
//阻塞方式延时,如果在主线程会卡住主界面
QThread::msleep(msec);
#else
//非阻塞方式延时,据说可能有问题
QTime endTime = QTime::currentTime().addMSecs(msec);
while (QTime::currentTime() < e