• Qt中定时器的所有使用方式


    在Qt中使用定时器一般有三种方式

    参考博客:

    Qt | 定时器的使用 - 知乎

    QT定时器事件startTimer_谢永奇1的博客-CSDN博客_starttimer

    Qt之定时器_付康为的博客-CSDN博客_qt 定时器 


    一、直接使用QObject类提供的定时器。

    QObject是所有Qt对象的基类,它提供了一个基本的定时器。


    1.在需要开启定时器的地方直接调用startTimer();
    该函数的声明为:int startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer);
    该函数开启一个定时器,返回值是定时器的编号。
    参数一为时间间隔,单位毫秒;
    参数二为定时器的精确度:
    Qt::PreciseTimer(精确的定时器,尽量保持毫秒精度,试图保持精确度在1毫秒);
    Qt::CoarseTimer(粗略的定时器,尽量保持精度在所需的时间间隔5%范围内);
    Qt::VeryCoarseTimer(很粗略的定时器,只保留完整的第二精度,大约为500毫秒);


    2.重载void QObject::timerEvent ( QTimerEvent * event );
    当定时器溢出时,会自动响应timerEvent()函数。
    在timerEvent()函数中,通过event->timerId()来确定是哪个定时器触发的;


    3.在需要关闭定时器的地方调用killTimer();
    该函数的声明为: void killTimer(int Id);
    该函数关闭一个定时器,参数为定时器的编号。

    示例如下:
     

    1. #include
    2. int timerid1;
    3. int timerid2;
    4. timerid1 = startTimer(1000);
    5. timerid2 = startTimer(3000);
    6. void MainWindow::timerEvent(QTimerEvent *e)
    7. {
    8. if(e->timerId()==timerid1)
    9. {
    10. qDebug("timer1");
    11. }
    12. else if(e->timerId()==timerid2)
    13. {
    14. qDebug("timer2");
    15. }
    16. killTimer(timer1);
    17. }


    二、使用QTimer类。


    1.用new的方式创建一个QTimer对象。
    QTimer *timer = new QTimer(this);


    2.将定时器的溢出信号连接到自定义的槽函数。
    connect(timer, &QTimer::timeout, this, &Myself::update);


    3.启动定时器。
    timer->start(1000);
    函数原型为:void start(int msec);参数为定时器时间间隔,单位毫秒。
    也可以调用timer->setInterval(1000);设置定时器时间间隔,然后调用timer->start();开启定时器。


    4.停止定时器。
    timer->stop();

    示例代码如下:
     

    1. // 产生一个定时器
    2. QTimer *timer = new QTimer(this);
    3. //连接这个定时器的信号和槽,利用定时器的timeout(),从而触发clear()槽函数
    4. connect(timer, &QTimer::timeout, this, &MainWindow::fun));
    5. //开始定时器,并设定定时周期,每隔5秒就会重启定时器,会重复触发定时,除非你利用stop()将定时器关掉
    6. timer->start(5000);
    7. // 仅仅启动定时器一次
    8. timer->setSingleShot(true);


    三、仅调用一次溢出的定时器。

    //这个是静态函数,不用创建对象直接用
    QTimer::singleShot(1000, this, SLOT(OnSendBreath()));
    函数原型有两个:
    1.static void singleShot(int msec, const QObject *receiver, const char *member);
    参数一为时间间隔,单位毫秒;参数二为接收溢出信号的对象;参数三为溢出信号的槽函数;
    2.static void singleShot(int msec, Qt::TimerType timerType, const QObject *receiver, const char *member);
    参数一为时间间隔,单位毫秒;参数二为定时器的精确度(同上文);参数三为接收溢出信号的对象;参数四为溢出信号的槽函数。

    示例代码如下:

    QTimer::singleShot (100, this, SLOT (onTimeout()));


    附录:


    一些常用函数:
    1. 判断定时器是否正在运行:bool QTimer::isActive () const

    //如果这个定时器正在运行,他将被停止并且重新开始,否则将会被开始。
    2. 改变定时器的时间间隔:void QTimer::changeInterval ( int msec )

  • 相关阅读:
    C进阶--数据的存储
    [ubuntu]安装robo 3t
    机试(2017 cs se)
    TypeScript查缺补漏【TS自动重启+自动运行+parcel自动打包】
    matplotlib从起点出发(15)_Tutorial_15_blitting
    IDEA新建SpringBoot项目时启动编译报错:Error:java: 无效的源发行版: 17
    关于南京的故事
    【STL】函数对象(仿函数)谓词 内建函数对象
    中望CAD 2025 (ZW3D2025) 简体中文修改版
    算法|Day49 动态规划17
  • 原文地址:https://blog.csdn.net/kangkanglhb88008/article/details/127849859