7、Qt延时的使用

一、说明

平时用到两种延时方式QThread::sleep()和QTimer::singleShot()

1、QThread::sleep()

QThread类中如下三个静态函数:

QThread::sleep(n); //延迟n秒

QThread::msleep(n); //延迟n毫秒

QThread::usleep(n); //延迟n微妙

这种方式使用简单,但是会阻塞线程,有界面时界面会卡死,一般在非GUI线程中使用

2QTimer::singleShotQEventLoop搭配使用

QEventLoop loop;

QTimer::singleShot(int(n), &loop, SLOT(quit()));

loop.exec();

创建一个事件循环,在n毫秒之后,退出这个事件,相当于延迟了n毫秒;

在子事件循环中,父事件循环仍然是可以执行的,所以不会堵塞线程。

二、sleep()使用

新建一个Qt项目

 在界面上放置一个PushButton,右击,选择”转到槽”,选择“clicked()”

更改.cpp中的代码如下

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QTime>
#include <QThread>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    qDebug() << QTime::currentTime().toString("hh:mm:ss");
    QThread::sleep(10);
    qDebug() << QTime::currentTime().toString("hh:mm:ss");
}

运行程序,点击“PushButton”,输出框输出当前时间,在十秒之内拖拽界面,是无法拖拽的,标题栏提示“未响应”

十秒之后,输出框又输出一个当前时间信息,此时界面可以随意拖拽了

三、QTimer::singleShot与QEventLoop搭配使用

更改(二)中的代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QTime>
#include <QTimer>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    qDebug() << QTime::currentTime().toString("hh:mm:ss");

    QEventLoop loop;
    QTimer::singleShot(int(1000*10), &loop, SLOT(quit()));
    loop.exec();

    qDebug() << QTime::currentTime().toString("hh:mm:ss");
}

运行程序,点击“PushButton”,输出框输出当前时间,可以随意拖拽界面

十秒之后,输出框又输出一个当前时间信息

相关推荐

  1. 订单实现

    2023-12-06 01:30:08       29 阅读
  2. 使用Redis实现队列

    2023-12-06 01:30:08       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-06 01:30:08       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-06 01:30:08       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-06 01:30:08       82 阅读
  4. Python语言-面向对象

    2023-12-06 01:30:08       91 阅读

热门阅读

  1. 【Element-ui】Element-ui是什么?如何安装

    2023-12-06 01:30:08       63 阅读
  2. 【Docker仓库】部署Docker Registry web-ui管理镜像仓库

    2023-12-06 01:30:08       57 阅读
  3. Uniapp Vue3 基础到实战 教学视频

    2023-12-06 01:30:08       51 阅读
  4. Android MTK平台配置应用可卸载

    2023-12-06 01:30:08       55 阅读
  5. ubuntu1804安装jupyter中的js环境

    2023-12-06 01:30:08       65 阅读
  6. 1076 Forwards on Weibo (链接表层序遍历)

    2023-12-06 01:30:08       55 阅读
  7. React实现登录授权功能

    2023-12-06 01:30:08       66 阅读
  8. 制作openeuler的livecd

    2023-12-06 01:30:08       68 阅读
  9. docker快捷控制

    2023-12-06 01:30:08       47 阅读
  10. QT之QNetworkAccessManager

    2023-12-06 01:30:08       56 阅读
  11. C#实现批量生成二维码

    2023-12-06 01:30:08       51 阅读
  12. 基于 EmotiVoice 的批量 TXT 文本转语音工具

    2023-12-06 01:30:08       50 阅读