百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

第10篇 基础(十)Qt定时器和随机数

cac55 2025-01-13 11:17 24 浏览 0 评论

导语

在前一篇中我们介绍了键盘和鼠标事件,其实还有一个非常常用的事件,就是定时器事件,如果要对程序实现时间上的控制,那么就要使用到定时器。而随机数也是很常用的一个功能,在我们要想产生一个随机的结果时就要使用到随机数。这一篇我们就来简单介绍一下定时器和随机数。

环境是:Windows 7 + Qt 4.8.1 +Qt Creator 2.4.1

目录

  • 一、定时器
  • 二、随机数

正文

一、定时器

Qt中有两种方法来使用定时器,一种是定时器事件,另一种是使用信号和槽。一般使用了多个定时器时最好使用定时器事件来处理。

1.新建Qt Gui应用,项目名称为myTimer,基类选择QWidget,类名为Widget

2.到widget.h文件中添加函数声明:

protected:
    void timerEvent(QTimerEvent *);

然后添加私有变量定义:

int id1, id2, id3;

3.下面到设计模式,向界面上拖入两个标签部件Label

4.下面进入widget.cpp文件,先在构造函数中添加如下代码:

id1 = startTimer(1000);  // 开启一个1秒定时器,返回其ID
id2 = startTimer(2000);
id3 = startTimer(10000);

这里开启了三个定时器,分别返回了它们的id,这个id用来区分不同的定时器。定时器的时间单位是毫秒。每当一个定时器溢出时,都会调用定时器事件处理函数,我们可以在该函数中进行相应的处理。

5.下面添加定时器事件处理函数的定义:

void Widget::timerEvent(QTimerEvent *event)
{
   if (event->timerId() == id1) {       // 判断是哪个定时器
       ui->label->setText(tr("%1").arg(qrand()%10));
   }
   else if (event->timerId() == id2) {
       ui->label_2->setText(tr("hello world!"));
   }
   else {
       qApp->quit();
   }
}

这里先使用timerId()函数返回了溢出的定时器的id,然后根据该id来判断是哪个定时器溢出了,并进行相应的处理。每当第一个定时器溢出时都产生一个小于10的随机数;当第二个定时器溢出时,就更改标签的文本;当第三个定时器溢出时则退出应用程序。现在可以运行程序,查看效果。

6.如果只是想开启少量的定时器,也可以使用信号和槽来实现。

先在widget.h中添加一个私有槽声明:

private slots:
    void timerUpdate();

然后到设计模式向界面上添加一个行编辑器部件Line Edit,再到widget.cpp中添加头文件包含:

#include <QTimer>
#include <QDateTime>

然后在构造函数中添加如下代码:

QTimer *timer = new QTimer(this);
//关联定时器溢出信号和相应的槽函数
connect(timer, SIGNAL(timeout()), this, SLOT(timerUpdate()));
timer->start(1000);

这里创建了一个定时器,并将其溢出信号和更新槽关联起来,最后使用start()函数来开启定时器。

下面添加timerUpdate()函数的定义:

void Widget::timerUpdate()
{
   //获取系统现在的时间
   QDateTime time = QDateTime::currentDateTime();
   //设置系统时间显示格式
   QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd");
   //在标签上显示时间
   ui->lineEdit->setText(str);
}

这里在行编辑器中显示了当前的时间。现在可以运行程序,查看效果。

【领QT开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】

点击→领取「链接」

二、随机数

关于随机数,在Qt中是使用qrand()qsrand()两个函数实现的。在前面的程序中已经看到了qrand()函数的使用,其可以产生随机数,qrand()%10可以产生0-9之间的随机数。要想产生100以内的随机数就是%100。以此类推。

在使用qrand()函数产生随机数之前,一般要使用qsrand()函数为其设置初值,如果不设置初值,那么每次运行程序,qrand()都会产生相同的一组随机数。为了每次运行程序时,都可以产生不同的随机数,我们要使用qsrand()设置一个不同的初值。这里使用了QTime类的secsTo()函数,它表示两个时间点之间所包含的秒数,比如代码中就是指从零点整到当前时间所经过的秒数。

下面先在widget.cpp的构造函数中添加如下代码:

qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));

然后在timerUpdate()函数的最后添加如下代码:

int rand = qrand() % 300;            // 产生300以内的正整数
ui->lineEdit->move(rand, rand);

这样,每过一秒,行编辑器都会移动到一个随机的位置。大家可以运行程序,查看效果。

结语

在编程中定时器和随机数很有用,尤其是在一些需要特殊效果的程序里,比如游戏程序。如果大家想了解更多使用介绍,可以参考《Qt Creator快速入门》第6章的相关内容。

相关推荐

正版系统受害者?微软确认部分用户Windows 7桌面变黑屏

IT之家1月27日消息微软Windows7系统已经于1月14日终止支持,微软不再致力于为已有数十年历史的OS推送新的质量更新。根据报道,微软最新的Windows7安全补丁更新破坏了该操作系统的基...

官方确认 盗版系统无法升Win 10

2015-07-3005:19:00作者:胡永彬中关村在线消息:Win10系统已经发布,官方宣称能够免费升级让我们非常高兴。不过并不是所有人都能免费升级的,据微软大中华区消费渠道事业部总经理张永利...

一文看懂Windows激活:自查方法+授权类型科普(Win7/Win10通用)

一、如何判断Windows是否永久激活?无论是Win7还是Win10,均可通过以下方法快速验证:命令提示符法(通用):按下Win+R,输入slmgr.vbs/xpr并按回车键运行即可查看是否...

你想打高危漏洞补丁,但是你不确定你的电脑系统是不是正版

如果不确定你的Windows系统版本是不是正版,可以按以下两种方法查看。方法一:1.在键盘上按下Win+R键,弹出“运行”窗口;2.在“运行”窗口的文本框中输入“slmgr.vbs-dlv”(注意v...

官方正版windows11无密钥安装

不管你目前用的是Win7还是Win10的操作系统,如果你想要安装Win11系统都可以按照下面的方法进行安装官方正版的windows11。当然,硬件必须要达到要求:系统要求的变化是Windows11...

windows11官网正版下载流程

windows11出来有一段时间了,最近刚好需要重做系统。那就试试新的win11吧。因为不喜欢各种第三方提供的下载,主要怕不安全。于是就从微软官网下载,现在把下载流程记录如下,方便需要的小伙伴。首先...

5块钱激活的Win10是否正版?微软回应:来这里检查

微软的Windows10系统(简称Win10)已经装机量超过10亿,很多人都是通过免费手段升级的。但是Win10系统并不是免费的,卖价还是挺贵的,家庭版就要1088元,很多人并不会买这么贵的。除了官...

Adobe推出正版检测系统 盗版会收到警示

【中关村在线软件资讯】5月24日消息:Adobe系列软件高昂的价格也促使了大量盗版Adobe软件的诞生,现在Adobe决定推出一个新的措施来与盗版对抗。据悉,Adobe最近推出了一个检测系统,能够检测...

解决Adobe正版验证弹窗警告(三种解决方法)

很多人在使用PS的过程中都会遇到提示非正版并且禁用的警告,可以尝试以下几种方法去解决。·第一种方法:可以使用修复工具下载并运行Adobe非正版弹窗警告的修复工具,并选择以管理员的身份去运行它,按照提示...

如何检测你的Windows系统是正版还是盗版?

电脑一般自己装个系统要么是没激活的,要么是盗版的,用着总是让人觉得不是那么的安心,那么接下来分享如何检测你的电脑系统是正版还是盗版?一般经常玩电脑的朋友都是通过右击桌面计算机点击属性里面查看电脑是否激...

再铺一次瓷砖,我死磕这6个细节!不是矫情,是血汗钱换来的教训

第一次装修踩的坑,第二次装修全避开!铺瓷砖这活儿,看着简单实则暗藏玄机。今天就把我花五万块买来的教训,掰开揉碎讲给你听,记住这6个细节,省下的钱够买半台冰箱!细节一:别信“瓷砖通铺显大”的鬼话!都说...

Windows 11系统,这款二合一笔记本居然才2000出头!

随着科技的不断发展,二合一电脑已经成为了一个更加全面和便捷的选择。DERE戴睿T60二合一笔记本,现在价格只要2000出头,国补后甚至不到2000!对于有二合一笔记本需求的宝子来说,无疑是一个不错的选...

爸妈的眼里,总少个我的位置

我家四个孩子,我是老大,底下俩妹妹,最小的是弟弟。从小我就知道,这家里的秤砣是歪的,那秤星全往弟弟那边偏。小时候过年,妈总会提前把新衣服拿出来。弟弟的永远是带拉链的夹克,胸前印着当时最火的卡通人物,我...

被吹上天的客厅“风管机”,值得投入吗?过来人说说大实话

作为家里刚装完风管机的“过来人”,聊几句大实话。当初装修公司狂推风管机,说比柜机便宜又节省空间,现在想想真是被戳中了中年人既要面子又要里子的心思。装好确实看着高级,不像柜式空调占着电视墙一平米好几万的...

电线不要埋墙了!试试这样做,真是聪明又实用,太佩服了

前阵子帮亲戚家看装修,聊到水电改造,他直摇头:“当年图省事把电线全埋墙里,现在想在客厅加个投影仪插座,师傅说墙里线路太密,改不了!只能走明线,像条大蜈蚣爬在墙上,看着闹心。”这事儿让我想起最近跟装修...

取消回复欢迎 发表评论: