ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

QT定时器的使用

2021-01-23 17:58:22  阅读:217  来源: 互联网

标签:Widget 定时器 QT timerEvent ui QString 使用 QTimer startTimer


方法一

使用 t i m e r E v e n t timerEvent timerEvent

[override virtual protected] void QTimer::timerEvent(QTimerEvent *e)

所以只需要在 W i d g e t . h Widget.h Widget.h里声明一下,然后去 W i d g e t . c p p Widget.cpp Widget.cpp实现即可

具体的操作写在函数 t i m e E v e n t timeEvent timeEvent中

但是怎么触发时间呢??我们需要激活一下,也就是

s t a r t T i m e r ( x ) startTimer(x) startTimer(x)

其中 x x x表示间隔 x   m s x\ ms x ms触发一次

然后 s t a r t T i m e r startTimer startTimer会返回一个 i n t int int类型的数,根据这个可以判断当前是哪个定时器

比如下面,实现了在 L a b e l Label Label中不停增长数字

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    id1 = startTimer(100);
    id2 = startTimer(1000);
}


void Widget::timerEvent(QTimerEvent *e)
{
    if( e->timerId()==id1 )
    {
        static int num1 = 1;
        ui->label_1->setText(QString::number(num1++));
    }
    if( e->timerId()==id2 )
    {
        static int num2 = 1;
        ui->label_2->setText(QString::number(num2++));
    }
}

Widget::~Widget()
{
    delete ui;
}


方法二

使用类 Q T i m e r QTimer QTimer实例对象,靠发射信号来写

    ui->setupUi(this);
    QTimer *timer1 = new QTimer(this);
    timer1->start(100);
    connect(timer1,&QTimer::timeout,
    [=]()
    {
        ui->label_1->setText(QString::number(id1++));
    }
            );
    QTimer *timer2 = new QTimer(this);
    timer2->start(1000);
    connect(timer2,&QTimer::timeout,
    [=]()
    {
        ui->label_2->setText(QString::number(id2++));
    }
            );

逻辑更加清晰

现在继续设置一个按钮,按下就停止计数

其实还是使用信号来写,用类 s t o p stop stop一下就好了

    connect(ui->Btn1,&QPushButton::clicked,[=]()
    {
        timer2->stop();
    }
            );

标签:Widget,定时器,QT,timerEvent,ui,QString,使用,QTimer,startTimer
来源: https://blog.csdn.net/weixin_51280132/article/details/113059290

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有