UI
一、通过 QTimer 类对象实现
1、头文件
1)引用 QTimer类 头文件,声明 QTimer 类对象
2)声明 超时响应(槽函数)
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QDebug>
#include <QTimer>//定时器类
#include <QTime>//时间类
#include <QTimerEvent>//定时器事件类
#include <QDateTime>//日期时间类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 timeout_slot();//声明自定义超时响应槽函数private:Ui::Widget *ui;//声明时间类对象QTimer t;};
#endif // WIDGET_H
2、在 原文件 中 定义按键响应函数 超时响应槽函数
1)在 Widget 的构造函数中 连接 信号与槽(因为只用连接一次)
2)定义按键响应槽函数
3)定义超时响应函数
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//信号与槽绑定connect(&t,&QTimer::timeout,this,&Widget::timeout_slot);
}Widget::~Widget()
{delete ui;
}//定义按键响应槽函数
void Widget::on_pushButton_clicked()
{if(ui->pushButton->text() == "启动"){//启动定时器t.start(100);//间隔指定时间发送一个timeout的信号//更新按键文本ui->pushButton->setText("关闭");}else{//关闭定时器t.stop();//更新按键文本ui->pushButton->setText("启动");}
}//定义超时响应函数
void Widget::timeout_slot()
{//static int num = 0;//ui->label->setNum(num++);//获取系统时间QTime systime = QTime::currentTime();//QTiem -> QStringQString tm = systime.toString("hh:mm:ss");//更新label文本ui->label->setText(tm);//设置标签位置ui->label->setAlignment(Qt::AlignCenter);//完全居中
}
二、使用 事件处理函数 完成
事件处理函数是 QTimerEvent类 中的一个虚函数,通过重载自定义功能
1、头文件
1)引用 QTimerEvent类 头文件
2)声明 按键响应槽函数
3)定义一个 int 型 变量,用于记录 定时器id
4)声明 事件处理函数 重载
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QDebug>
#include <QTimer>//定时器类
#include <QTime>//时间类
#include <QTimerEvent>//定时器事件类
#include <QDateTime>//日期时间类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_2_clicked();private:Ui::Widget *ui;int tid = 0;//定时器id号//声明 事件处理函数 重载void timerEvent(QTimerEvent *event) override;};
#endif // WIDGET_H
2、原文件
1)定义按键响应槽函数
2)定义(重载)事件处理函数
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);}Widget::~Widget()
{delete ui;
}//定义按键响应槽函数
void Widget::on_pushButton_2_clicked()
{if(ui->pushButton_2->text() == "启动"){//启动定时器tid = this->startTimer(100);//每隔100ms自动调用定时器事件处理函数//更新按键文本ui->pushButton_2->setText("关闭");}else{//关闭定时器t.stop();//更新按键文本ui->pushButton_2->setText("启动");}
}//定义(重载)事件处理函数
void Widget::timerEvent(QTimerEvent *event)
{//判断定时器编号if(event->timerId() == tid){ui->label_2->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));ui->label_2->setAlignment(Qt::AlignCenter);}
}