欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 【QT】 QT定时器的使用

【QT】 QT定时器的使用

2025/5/21 5:53:29 来源:https://blog.csdn.net/qq_62917398/article/details/147260155  浏览:    关键词:【QT】 QT定时器的使用

QT定时器的使用

  • 1. QTimer介绍
    • (1)QTimer的使用方法步骤
      • 示例代码1:定时器的启动和关闭
      • 现象:
      • 示例代码2:定时器每隔1s在标签上切换图片
      • 现象:
    • (2)实际开发的作用
  • 2.日期 QDate
    • (1)主要方法
  • 3.时间 QTime
    • (1)主要方法
      • 示例代码:
      • 现象:

1. QTimer介绍

QTimer是Qt中提供的一个定时器类,它可以定时触发一个信号,用于周期性执行一些操作。使用QTimer,可以轻松地实现定时器功能,如周期性地更新UI界面,周期性地执行一些任务等。

(1)QTimer的使用方法步骤

第一步:定义QTimer的对象
QTimer(QObject *parent = Q_NULLPTR)
参数:parent --this指针
第二步:设置超时时间(定时时间)
void setInterval(int msec)
参数:msec --》毫秒
第三步:启动定时器
void QTimer::start()
超时时间一旦到了,QTimer对象会自动触发timeout()信号,程序员只需要关联这个信号,在自定义的槽函数去实现自己的代码逻辑即可
第四步:关闭定时器
void QTimer::stop()

示例代码1:定时器的启动和关闭

// widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void onTimeout();void onStartTimer();void onStopTimer();private:Ui::Widget *ui;QTimer *myTimer;
};
#endif // WIDGET_H// widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QTimer>
#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 初始化定时器对象myTimer = new QTimer(this);// 设置定时时间(超时时间)myTimer->setInterval(1000);// 时间到了QTimer的对象会自动触发timeout信号connect(myTimer, SIGNAL(timeout()), this, SLOT(onTimeout()));// 关联启动定时器按钮的槽函数connect(ui->btn_start, SIGNAL(clicked()), this, SLOT(onStartTimer()));// 关联关闭定时器按钮的槽函数connect(ui->btn_close, SIGNAL(clicked()), this, SLOT(onStopTimer()));
}Widget::~Widget()
{delete ui;
}void Widget::onTimeout()
{qDebug()<<"hello world";
}void Widget::onStartTimer()
{qDebug()<<"StartTimer";myTimer->start();
}void Widget::onStopTimer()
{qDebug()<<"stopTimer";myTimer->stop();
}

现象:

在这里插入图片描述

示例代码2:定时器每隔1s在标签上切换图片

// widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_pushButton_clicked();void fun();void on_pushButton_2_clicked();private:Ui::Widget *ui;QStringList piclist;QTimer *mytimer;int n; //图片的下标
};
#endif // WIDGET_H// widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QTimer>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//把所有要显示的图片存放到字符串列表中n=0;piclist.append("C:\\Users\\xxx\\Desktop\\vm_shared\\code\\QT_proj\\250414_timerSwitchPic\\res\\1.png");piclist.append("C:\\Users\\xxx\\Desktop\\vm_shared\\code\\QT_proj\\250414_timerSwitchPic\\res\\2.png");piclist.append("C:\\Users\\xxx\\Desktop\\vm_shared\\code\\QT_proj\\250414_timerSwitchPic\\res\\3.png");piclist.append("C:\\Users\\xxx\\Desktop\\vm_shared\\code\\QT_proj\\250414_timerSwitchPic\\res\\4.png");piclist.append("C:\\Users\\xxx\\Desktop\\vm_shared\\code\\QT_proj\\250414_timerSwitchPic\\res\\5.png");//初始化定时器mytimer=new QTimer(this);mytimer->setInterval(1000); //1秒connect(mytimer,SIGNAL(timeout()),this,SLOT(fun()));
}Widget::~Widget()
{delete ui;
}//启动定时器
void Widget::on_pushButton_clicked()
{mytimer->start();
}void Widget::fun()
{//每隔一秒钟在标签上切换显示图片QPixmap map(piclist.at(n));map.scaled(ui->label->width(),ui->label->height());ui->label->setScaledContents(true);ui->label->setPixmap(map);//由于只有5张(piclist.size())图片,n不可以无限制++if(n<piclist.size()-1)n++;elsen=0;
}void Widget::on_pushButton_2_clicked()
{mytimer->stop();
}

现象:

在这里插入图片描述

(2)实际开发的作用

定时器替代死循环/循环

2.日期 QDate

(1)主要方法

[static] QDate QDate::currentDate()
返回值:QDate的对象,表示当前系统的日期
int QDate::year() const
返回值:返回年
int QDate::month() const
返回值:返回月
int QDate::day() const
返回值:返回日
toString("yyyy-MM-dd")
把日期转换成字符串

3.时间 QTime

(1)主要方法

[static] QTime QTime::currentTime()
返回值:QTime对象,表示当前系统的时间
int QTime::hour() const
int QTime::minute() const
int QTime::second() const
toString("hh:mm:ss")
把时间转换成字符串

示例代码:

// widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();public slots:void onUpdateTime(void);private:Ui::Widget *ui;
};
#endif // WIDGET_H// widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QTime>
#include <QTimer>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 1.实例化定时器对象QTimer *timer = new QTimer;// 2.定时器启动后会以指定的间隔时间发射timeout信号,关联对应的槽函数,执行对应的操作connect(timer, &QTimer::timeout, this, &Widget::onUpdateTime);// 3.启动定时器 1s定时timer->start(1000);
}Widget::~Widget()
{delete ui;
}void Widget::onUpdateTime()
{// 显示到标签上ui->label_2->setText(QTime::currentTime().toString());
}

现象:

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词