首页 > 其他分享 >VS2022+QT6.7.2 定时器的使用(两种方法)

VS2022+QT6.7.2 定时器的使用(两种方法)

时间:2024-08-21 20:23:21浏览次数:14  
标签:定时器 QT6.7 timerId QObject VS2022 include QtWidgetsApplication19 QTimer

目录

一、继承QObject定时器事件

二、QTimer类

三、具体实现


一、继承QObject定时器事件

    所有继承自QObject的类,都会有一个timerEvent(QTimerEvent *event)的纯虚函数,startTimer()设定定时间隔并启动,再重载这个函数以处理自己的定时任务,多个定时任务用timeId区分,结束后使用killTimer(timerid)关闭定时任务。

void timerEvent(QTimerEvent *event);  //重写定时器事件(继承QObject)
int timerId; //定时器ID(继承QObject)
timerId=startTimer(1000); //启动定时器并获取定时器ID(继承QObject)

void QtWidgetsApplication19::timerEvent(QTimerEvent* event)  //重写定时器事件
{
    if (event->timerId()== timerId) //判断定时器ID,确定是哪个定时器
    {
      //需要运行的内容
    }
}

二、QTimer类

    使用信号与槽connect的形式完成定时任务,创建一个QTimer类对象,调用start函数完成定时和启动。

QTimer *timer=new QTimer();  //定时器(QTimer类)
void starttimer(); //定时器槽函数(QTimer类)

connect(timer,&QTimer::timeout,this,&QtWidgetsApplication19::starttimer);

三、具体实现

 ui界面如下:

 QtWidgetsApplication19.h

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsApplication19.h"
#include <QTimer>
#include <QDateTime>
#include <QDebug>
#include <QObject>

class QtWidgetsApplication19 : public QMainWindow
{
    Q_OBJECT

public:
    QtWidgetsApplication19(QWidget *parent = nullptr);
    ~QtWidgetsApplication19();

    QTimer *timer=new QTimer();  //定时器(QTimer类)
    void starttimer(); //定时器槽函数(QTimer类)

    void timerEvent(QTimerEvent *event);  //重写定时器事件(继承QObject)
    int timerId; //定时器ID(继承QObject)

private:
    Ui::QtWidgetsApplication19Class ui;
};

 QtWidgetsApplication19.cpp

#include "QtWidgetsApplication19.h"

QtWidgetsApplication19::QtWidgetsApplication19(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);

    connect(timer,&QTimer::timeout,this,&QtWidgetsApplication19::starttimer);
    connect(ui.pushButton, &QPushButton::clicked, [=]() {
        timer->start(1000); //启动定时器,间隔1s(QTimer类)
        });

    connect(ui.pushButton_2, &QPushButton::clicked, this, [=]() {
        timerId=startTimer(1000); //启动定时器并获取定时器ID,间隔1s(继承QObject)
        });
}

void QtWidgetsApplication19::starttimer() 
{
    QDateTime dt = QDateTime::currentDateTime(); //获取系统时间
    ui.textEdit->append(dt.toString("dd.MM.yyyy hh:mm:ss")); //打印系统时间
}

void QtWidgetsApplication19::timerEvent(QTimerEvent* event)  //重写定时器事件
{
    if (event->timerId()== timerId) //判断定时器ID,确定是哪个定时器
    {
        QDateTime dt = QDateTime::currentDateTime();
        ui.textEdit_2->append(dt.toString("dd.MM.yyyy hh:mm:ss"));
    }
}

QtWidgetsApplication19::~QtWidgetsApplication19()
{

}

main.cpp

#include "QtWidgetsApplication19.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QtWidgetsApplication19 w;
    w.show();
    return a.exec();
}

实现效果:

标签:定时器,QT6.7,timerId,QObject,VS2022,include,QtWidgetsApplication19,QTimer
From: https://blog.csdn.net/ZJQSDSA/article/details/141279136

相关文章

  • python flask 定时器
    安装pipinstallflaskpipinstallflask_apscheduler-ihttps://pypi.tuna.tsinghua.edu.cn/simple/--trusted-hostpypi.tuna.tsinghua.edu.cn使用方法一:使用Config类配置时间规则fromflaskimportFlaskfromflask_apschedulerimportAPSchedulerclassC......
  • 定时器
    定时器是一个应用十分广泛的线程工具,可用于调度多个定时任务以后台线程的方式执行。在Java中,可以通过Timer和TimerTask类来实现定义调度的功能TimerpublicTimer()publicvoidschedule(TimerTask task,long delay)publicvoidschedule(TimerTasktask,longdelay,longpe......
  • STP(角色选举、状态、定时器、拓扑变更机制、PVST、PVST+增强特性)
    文章目录一、什么是STP定义特点工作原理专业术语二、STP角色选举1、配置命令:2、端口角色:三、STP的状态四、STP的定时器①HelloTime:2s②MaxAge:20s③ForwardDelay:15s④AgingTime:300s五、STP拓扑变化机制六、PVST七、PVST+增强特性......
  • VS2022实用调试技巧超详解
    文章目录1.什么是bug2.什么是调试(debug)3.Debug和Release4.VS调试快捷键4.1环境准备4.2调试快捷键5.监视和内存观察5.1监视5.2内存6.调试举例17.调试举例29.编程常见错误归类9.1编译型错误9.2链接型错误9.3运行时错误本文章以VS2022为例讲解调......
  • Qt - QTimer 定时器深入使用
    QTimer1、定时器执行start(0)时:会立即启动定时器,且超时时间为0,即一直超时并执行超时函数 2、对于同一定时器,当定时器是start状态,再次执行start函数,Qt会将定时器stop后重新启动该定时器 3、对于同一定时器,当再次执行start函数,Qt会以新的超时时间开始该定时器,比如setInterva......
  • 以定时器为例研究一手 Python asyncio 的协程事件循环调度
    在使用Python的asyncio库实现异步编程的过程中,协程与事件循环这两个概念可以说有着千丝万缕的联系,常常是形影不离的出现,如胶似漆般的存在,asyncio库到底是如何调度协程的?下面以Python3.8中的asyncio.sleep定时器为例研究一手asyncio的源码实现。几个主要的概念首先......
  • vs2022使用方法
    文章原创,内容来自b站up主microfrank,本文从vs2022安装问题,怎么使用,项目里各个文件的意义,以及代码分享等功能1.installer安装器讲解:开始菜单搜索vis,其中有一个installer后缀,供以后重新设置,bug修复,卸载等2.登录以及激活:登录:用微软账户邮箱登录()密码()3.创建项目以及认识视图窗口: ......
  • VS2022+QT6.7.2 子线程与主线程通信(详细)(注释)
    需求:主线程将需要计算的数据发送给子线程,子线程将计算后的结果返回给主线程。实现逻辑:(前提:子线程类已创建好,并使用start方法启动子线程)1、主线程的mysignal1信号触发子线程的myslot2槽函数方法:connect(this,&QtWidgetsApplication13::mysignal1,st,&mythread::myslot2);......
  • vs2022 x64 C/C++和汇编混编 遇到的坑
    vs2022x64C/C++和汇编混编遇到的坑遇到的问题二、问题复现1.出错代码2.问题分析2.1堆栈对齐问题3.解决方案总结奇数和偶数个寄存器的影响为什么`subrsp,8`对奇数个寄存器有用?结论遇到的问题0x00007FFFFAE24A29(msvcp140.dll)处(位于TestCompileConsol......
  • freertos学习(九)软件定时器
    软件定时器软件定时器是freeRTOS通过一个硬件定时器,实现的定时器。可以实现不同时长的多个定时任务不从中断上下文中执行定时器回调函数(不消耗任何处理时间)实现流程设置软件定时器,推入定时器命令队列开始计时计时到,启用回调函数如不是循环模式,则该定时器停止运行注......