QTimer很容易使用:创建一个QTimer,使用start(),并把timeout()连接到槽函数。
当这段时间过去了,它将会发射timeout()信号。
2、使用静态的函数来创建单触发定时器。
作为一个特殊情况,一旦窗口系统事件队列中的所有事件都已经被处理完,一个定时为0的QTimer就会到时间了。
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QTime> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), bIsClick(false), ui(new Ui::MainWindow) { ui->setupUi(this); timer = new QTimer; //构建QTimer对象 codec = QTextCodec::codecForLocale(); //设置字符集 //第一种方式
connect(timer,SIGNAL(timeout()),SLOT(S_showMsg()));//使用start()与timeout()组合实时更新当前时间
//第二种方式
QTimer::singleShot(5000,this,SLOT(S_displayTime()));//只执行一次,间隔5秒 QTimer::singleShot(10000,this,SLOT(close())); //10秒过后关闭窗口 } MainWindow::~MainWindow() { delete ui; delete timer; } void MainWindow::S_showMsg() { static int num; ui->timeLabel->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss zzz")); if(++num == 5) timer->setInterval(1); //重置定时器时间间隔,在此过程重新调用了start() } void MainWindow::S_displayTime() { ui->timeLabel2->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss zzz")); } void MainWindow::on_pushButton_clicked() { bIsClick = !bIsClick; if(bIsClick) { ui->pushButton->setText(codec->toUnicode("停止")); timer->start(1000); //间隔1秒执行一次 if(timer->isActive()) //判断定时器停止 ui->statusLabel->setText(tr("<span style = color:red>%1</span>").arg(codec->toUnicode("定时器正在运行..."))); } else { ui->pushButton->setText(codec->toUnicode("开始")); timer->stop(); if(!timer->isActive()) ui->statusLabel->setText(tr("<span style = color:green>%1</span>").arg(codec->toUnicode("定时器停止运行"))); } }