有两种方法实现定时器。第一种。自己建立关联。1.新建Gui工程,工程名可以设置为timer。并在主界面上添加一个标签label,并设置其显示内容为“0000-00-00 00:00:00 星期日”。2.在mainwindow.h中添加槽函数声明。private slots:void timerUpDate();3.在mainwindow.cpp中添加代码。添加#include <QtCore>的头文件包含,这样就包含了QtCore下的所有文件。构造函数里添加代码:QTimer *timer = new QTimer(this);//新建定时器connect(timer,SIGNAL(timeout()),this,SLOT(timerUpDate()));//关联定时器计满信号和相应的槽函数timer->start(1000);//定时器开始计时,其中1000表示1000ms即1秒4.然后实现更新函数。void MainWindow::timerUpDate(){QDateTime time = QDateTime::currentDateTime();//获取系统现在的时间QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd");//设置系统时间显示格式ui->label->setText(str);//在标签上显示时间}5.运行程序,效果如下。
第二种。使用事件。(有点像单片机中的定时器啊)1.新建工程。在窗口上添加两个标签。2.在main.cpp中添加代码,实现中文显示。#include <QTextCodec>QTextCodec::setCodecForTr(QTextCodec::codecForLocale());3.在mainwindow.h中添加代码。int timerID_1;int timerID_2;int timerID_3;void timerEvent(QTimerEvent *);4.在mainwindow.cpp中添加代码。添加头文件#include <QtCore>在构造函数里添加以下代码。timerID_3 = startTimer(10000);timerID_1 = 1; //设置定时器句柄timerID_1的值为1;timerID_2 = 2;timerID_3 = 3;timerID_1 = startTimer(1000); //启动1秒每次的定时器,其句柄为timerID_1timerID_2 = startTimer(5000);在下面添加函数实现。void MainWindow::timerEvent(QTimerEvent *t) //定时器事件
{
switch(t->timerId()) //判断定时器的句柄
{
case 1 : ui->label->setText(tr("每秒产生一个随机数:%1").arg(qrand()%10));break;
case 2 : ui->label_2->setText(tr("5秒后软件将关闭"));break;
case 3 : qApp->quit();break; //退出系统
}
}
这里添加了三个定时器,并都在定时器事件中判断它们,然后执行相应的功能。这样就不用每个定时器都写一个关联函数和槽函数了。
随机数的实现:上面程序中的qrand(),可以产生随机数,qrand()%10可以产生0-9之间的随机数。要想产生100以内的随机数就%100。以此类推。但这样每次启动程序后,都按同一种顺序产生随机数。为了实现每次启动程序产生不同的初始值。我们可以使用qsrand(time(0));实现设置随机数的初值,而程序每次启动时time(0)返回的值都不同,这样就实现了产生不同初始值的功能。我们将qsrand(time(0));一句加入构造函数里。程序最终运行效果如下。到博客查看带图原文:http://hi.baidu.com/yafeilinux/blog/item/df53dbc315754f110ff4775a.html[ 此帖被yafei86在2009-11-10 16:01重新编辑 ]