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_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
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 -> QString
QString 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_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
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);
}
}