定时器(QTimer)与随机数生成器(QRandomGenerator)的应用实践——Qt(C++)

一、QTimer与QRandomGenerator

(一)QTimer(定时器)[2]

QTimer类为定时功能提供了一个高级编程接口。在使用QTimer时,实例化一个QTimer对象并将其timeout()发射信号与合适的信号槽相连接。通过调用QTimer的start()函数开启定时器,QTimer实例对象将会在固定时间间隔后发送timeout()信号。

定时器的精度取决于底层操作系统和硬件,大多数平台支持1毫秒的时间分辨率。尽管在许多实际情况下,定时器的精度并不会等于1毫秒的时间分辨率。QTimer支持三种定时器类型,精确定时器(Precise Timer)、粗略定时器(Coarse Timer)和非常粗略定时器(VeryCoarse Timer)。

定时器的一些应用[3-4]:

  1. 定时任务。例如,固定间隔时间自动保存用户数据、固定间隔时间检查网络连接状态等;

  2. 动画效果。通过调整定时器的间隔时间设定和目标动画的状态(比如不同图像、图像颜色和图像透明度等)切换方式来实现各种各样的动画效果;

  3. 延时执行。经过一段间隔时间后再执行目标操作;

  4. 精确控制定时器的精度。通过设置定时器的类型以对定时器的精度和资源消耗之间做出权衡。

(二)QRandomGenerator(随机数生成器)[2]

QRandomGenerator主要用于从高质量的随机数生成器中生成随机数值。与C++随机数生成引擎一样,可以根据用户种子数值来构造QRandomGenerator实例对象,相同的种子数值会生成相同的数值序列,不同的种子数值会生成差异巨大的数值序列。

二、应用实践案例------简易时钟

实验环境配置:

Qt编译器版本:Desktop Qt 5.15.2 MSVC2019 64bit

Visual Studio编程平台:VS2019

(一)效果展示

(二)关键代码

cpp 复制代码
// 定时器的实例化与信号连接
timer = new QTimer(this);
connect(timer, &QTimer::timeout,this,&MainWindow::timerUpdate);

// 定时器的启动与结束
timer->start(1000);
timer->stop();

// 图片随机播放(图片名称为dog1.jpg开始)
// mytimer为创建Qt的项目名称
int rand = QRandomGenerator::global()->bounded(5);  // 产生5以内随机整数即0-4
QPixmap pix = QPixmap(QString("../mytimer/res/dog%1.jpg").arg(rand+1));
ui->label->setPixmap(pix.scaled(ui->label->size(), Qt::IgnoreAspectRatio));

参考资料:

1\] Qt 6 C++开发指南 / 王维波,栗宝鹃,侯春望著.---北京:人民邮电出版社,2023.1. \[2\] Assistant 5.15.2 (MSVC 2019 64-bit)-Qt::ConnectionType(Qt使用文档助手) \[3\] [深入理解Qt定时器:QTimer的魅力与挑战(一)-阿里云开发者社区 (aliyun.com)](https://developer.aliyun.com/article/1465262 "深入理解Qt定时器:QTimer的魅力与挑战(一)-阿里云开发者社区 (aliyun.com)") \[4\] [深入理解Qt定时器:QTimer的魅力与挑战(二)-阿里云开发者社区 (aliyun.com)](https://developer.aliyun.com/article/1465264?spm=a2c6h.12873639.article-detail.9.d0cb56fd6qQuUj "深入理解Qt定时器:QTimer的魅力与挑战(二)-阿里云开发者社区 (aliyun.com)")

相关推荐
No0d1es4 小时前
电子学会青少年软件编程(C/C++)5级等级考试真题试卷(2024年6月)
c语言·c++·算法·青少年编程·电子学会·五级
DjangoJason5 小时前
C++ 仿RabbitMQ实现消息队列项目
开发语言·c++·rabbitmq
奇树谦7 小时前
QT|windwos桌面端应用程序开发,当连接多个显示器的时候,如何获取屏幕编号?
开发语言·qt
weixin_307779137 小时前
VS Code配置MinGW64编译GNU 科学库 (GSL)
开发语言·c++·vscode·算法
蒋星熠9 小时前
C++零拷贝网络编程实战:从理论到生产环境的性能优化之路
网络·c++·人工智能·深度学习·性能优化·系统架构
CHANG_THE_WORLD10 小时前
# C++ 中的 `string_view` 和 `span`:现代安全视图指南
开发语言·c++
雨落倾城夏未凉10 小时前
9.c++new申请二维数组
c++·后端
Franklin10 小时前
Python界面设计【QT-creator基础编程 - 01】如何让不同分辨率图像自动匹配graphicsView的窗口大小
开发语言·python·qt
雨落倾城夏未凉10 小时前
8.被free回收的内存是立即返还给操作系统吗?为什么?
c++·后端
雨落倾城夏未凉10 小时前
6.new和malloc的区别
c++·后端