Qt定时器 QTimer使用

Qt编程7:Qt定时器 QTimer使用

1631人阅读 评论(0) 收藏 举报
本文章已收录于:
分类:
1、QTimer类提供了定时器信号和单触发定时器。

QTimer很容易使用:创建一个QTimer,使用start(),并把timeout()连接到槽函数。

当这段时间过去了,它将会发射timeout()信号。

 

2、使用静态的函数来创建单触发定时器。

作为一个特殊情况,一旦窗口系统事件队列中的所有事件都已经被处理完,一个定时为0的QTimer就会到时间了。

  1. #include "mainwindow.h"  
  2. #include "ui_mainwindow.h"  
  3. #include <QTime>  
  4.   
  5.   
  6. MainWindow::MainWindow(QWidget *parent) :  
  7.     QMainWindow(parent),  
  8.     bIsClick(false),  
  9.     ui(new Ui::MainWindow)  
  10. {  
  11.     ui->setupUi(this);  
  12.     timer = new QTimer;                                //构建QTimer对象  
  13.     codec = QTextCodec::codecForLocale();              //设置字符集  
  14.   
  15.     //第一种方式      
#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();              //设置字符集

    //第一种方式    
  1. connect(timer,SIGNAL(timeout()),SLOT(S_showMsg()));//使用start()与timeout()组合实时更新当前时间  
    connect(timer,SIGNAL(timeout()),SLOT(S_showMsg()));//使用start()与timeout()组合实时更新当前时间
  1. //第二种方式  
   //第二种方式
  1.     QTimer::singleShot(5000,this,SLOT(S_displayTime()));//只执行一次,间隔5秒  
  2.   
  3.     QTimer::singleShot(10000,this,SLOT(close()));       //10秒过后关闭窗口  
  4. }  
  5.   
  6. MainWindow::~MainWindow()  
  7. {  
  8.     delete ui;  
  9.     delete timer;  
  10. }  
  11.   
  12. void MainWindow::S_showMsg()  
  13. {  
  14.     static int num;  
  15.     ui->timeLabel->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss zzz"));  
  16.     if(++num == 5)  
  17.         timer->setInterval(1);                         //重置定时器时间间隔,在此过程重新调用了start()  
  18. }  
  19.   
  20.   
  21. void MainWindow::S_displayTime()  
  22. {  
  23.     ui->timeLabel2->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss zzz"));  
  24. }  
  25.   
  26.   
  27. void MainWindow::on_pushButton_clicked()  
  28. {  
  29.     bIsClick = !bIsClick;  
  30.     if(bIsClick)  
  31.     {  
  32.         ui->pushButton->setText(codec->toUnicode("停止"));  
  33.         timer->start(1000);                               //间隔1秒执行一次  
  34.   
  35.         if(timer->isActive())                             //判断定时器停止  
  36.             ui->statusLabel->setText(tr("<span style = color:red>%1</span>").arg(codec->toUnicode("定时器正在运行...")));  
  37.     }  
  38.     else  
  39.     {  
  40.         ui->pushButton->setText(codec->toUnicode("开始"));  
  41.         timer->stop();  
  42.         if(!timer->isActive())  
  43.             ui->statusLabel->setText(tr("<span style = color:green>%1</span>").arg(codec->toUnicode("定时器停止运行")));  
  44.     }  
  45. }  
    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("定时器停止运行")));
    }
}



 


 

 

 

0
0
 
 
我的同类文章
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值