当前位置: 首页 > news >正文

6、Qt延时的使用

一、sleep()

1、说明

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

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

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

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

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

2、使用

新建一个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搭配使用

1、说明

QEventLoop loop;

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

loop.exec();

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

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

2、使用

更改(一)中的代码

#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”,输出框输出当前时间,可以随意拖拽界面

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

http://www.lryc.cn/news/249410.html

相关文章:

  • 《Effective C++》条款26
  • np.random.uniform() 采样得到的是一个高维立方体,而不是球体,为什么?
  • 1 时间序列模型入门: LSTM
  • 1-Python与设计模式--单例模式
  • Rust之构建命令行程序(一):接受命令行参数
  • Go 谈论了解Go语言
  • 《C++PrimerPlus》第9章 内存模型和名称空间
  • uniapp上架app store详细攻略
  • 面试:线上问题处理
  • Vue3中快速Diff算法
  • ROS2+STM32小车红外对射光电计数器模块资料
  • Android设计模式--桥接模式
  • 1、分布式锁实现原理与最佳实践(一)
  • Autosar通信实战系列03-NM模块要点及其配置介绍
  • Golang模块管理功能
  • 从零构建属于自己的GPT系列1:文本数据预处理、文本数据tokenizer、逐行代码解读
  • scipy 笔记:scipy.spatial.distance
  • java video audio encoder
  • TypeScript 中声明类型的方法
  • 显示器校准软件BetterDisplay Pro mac中文版介绍
  • Element UI 走马灯 实现鼠标滚动切换页面
  • 在Docker上部署Springboot项目
  • 2024中国眼博会,全国眼康与眼镜品牌加盟展会,北京眼健康展
  • C++学习 --谓词
  • Arkts深入了解运用 LazyForEach【鸿蒙专栏-17】
  • 如何让你的 Jmeter+Ant 测试报告更具吸引力?
  • 游戏APP接入哪些广告类型
  • Echarts地图registerMap使用的GeoJson数据获取
  • 【JavaEE】Java中的多线程 (Thread类)
  • python中具名元组的使用