,,Qt定时器和随机数详解

,,Qt定时器和随机数详解

在上一篇文章中,我们介绍了键盘和鼠标事件。其实有一个很常见的事件,就是定时器事件。如果你想控制程序的时间,你应该使用定时器。而随机数也是一个很常见的函数。当我们想要产生一个随机的结果时,我们应该使用随机数。下面我们简单介绍一下本文中的定时器和随机数。

环境:Windows 7 Qt 4.8.1 Qt Creator 2.4.1

一、定时器

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

1.新建一个Qt Gui应用,项目名为myTimer,基类为QWidget,类名为Widget。

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

受保护:

void time revent(QTimerEvent *);

然后添加一个私有变量定义:

int id1,id2,id3

3.进入设计模式,将两个标签部件Label拖入界面。

4.接下来,进入widget.cpp文件,首先在构造函数中添加以下代码:

id1=startTimer(1000);//启动1秒计时器并返回其ID

id2=start timer(2000);

ID3=start timer(10000);

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

5.在下面添加计时器事件处理程序的定义:

void小部件:time revent(QTimerEvent *事件)

{

If (event-timerId()==id1) {//确定是哪个定时器

ui-label-setText(tr('%1 ')。arg(qrand()));

}

else if (event-timerId()==id2) {

ui-label _ 2-setText(tr(' hello world!'));

}

否则{

qApp-quit();

}

}

这里使用timerId()函数返回溢出定时器的Id,然后根据id确定哪个定时器溢出,并进行相应的处理。每当第一定时器溢出时,产生小于10的随机数;当第二定时器溢出时,标签的文本被改变;当第三个定时器溢出时,退出应用程序。现在你可以运行程序,看看效果。

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

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

专用插槽:

void timer update();

然后在设计模式下将行编辑器组件Line Edit添加到界面中,然后将头文件添加到widget.cpp中以包括:

#包含QTimer

#包含QDateTime

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

q timer * timer=new q timer(this);

//关联定时器溢出信号和对应的槽函数。

connect(timer,SIGNAL(timeout()),this,SLOT(timer update());

计时器启动(1000);

这里,创建了一个定时器,它的溢出信号与更新槽相关联。最后,start()函数用于启动计时器。

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

void小部件:timerUpdate()

{

//获取系统的当前时间

QDateTime time=QDateTime:current datetime();

//设置系统时间显示格式

QString str=time . tostring(' yyyy-MM-DD hh:MM:ss dddd ');

//在标签上显示时间

ui-line edit-setText(str);

}

当前时间显示在行编辑器中。现在你可以运行程序,看看效果。

二、随机数

关于随机数,Qt中使用了qrand()和qsrand()函数。在前面的程序中,我们已经看到了qrand()函数的使用,它可以生成随机数。QR和()可以生成0到9之间的随机数。生成100以内的随机数是0。诸如此类。

在使用qrand()函数生成随机数之前,一般需要使用qsrand()函数设置初始值。如果不设置初始值,qrand()会在每次运行程序时生成相同的一组随机数。为了在每次运行程序时生成不同的随机数,我们需要使用qsrand()来设置不同的初始值。这里使用了QTime类的secsTo()函数,它表示两个时间点之间的秒数。例如,在代码中,它是指从零到当前时间的秒数。

首先,将以下代码添加到widget.cpp的构造函数中:

qsrand(QTime(0,0,0)。secsTo(q time:current time());

然后在timerUpdate()函数的末尾添加以下代码:

int rand=qrand()% 300;//生成300以内的正整数

ui-lineEdit-move(rand,rand);

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

以上是本文的全部内容。我希望你能喜欢它。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • vue中的定时器清不掉,vue设置定时器调用方法,vue如何设置定时器和清理定时器
  • js定时方法,js的定时器函数
  • js定时方法,js的定时器函数,js定时器的使用(实例讲解)
  • js定时器重复执行怎么停止,js每隔几秒执行一次
  • js定时器重复执行怎么停止,js每隔几秒执行一次,js定时器(执行一次、重复执行)
  • js定时器重复执行怎么停止,,js定时器(执行一次、重复执行)
  • js中2种定时器的使用及清除的实现过程,js中两种定时器的设置及清除
  • js中2种定时器的使用及清除的实现过程,js中两种定时器的设置及清除,JS中2种定时器的使用及清除的实现
  • ,,Qt基础开发之Qt多线程类QThread与Qt定时器类QTimer的详细方法与实例
  • ,,IOS 中NSTimer定时器的使用
  • C语言定时器,c语言定时器程序编写
  • C语言定时器,c语言定时器程序编写,C语言实现简单的定时器
  • java 定时器的多种实现方式有哪些,java定时器的实现方式有几种
  • java 定时器的多种实现方式有哪些,java定时器的实现方式有几种,Java 定时器的多种实现方式
  • ,,Java中的定时器Timer详解
  • 留言与评论(共有 条评论)
       
    验证码: