【嵌入式——QT】日期与定时器

日期

  • QTime:时间数据类型,仅表示时间,如 16:16:16;
  • QDate:日期数据类型,仅表示日期,如2024-1-22;
  • QDateTime:日期时间数据类型,表示日期和时间,如2024-1-22 19:03:03;
  • QTimeEdit:编辑和显示时间的组件;
  • QDateEdit:编辑和显示日期的组件;
  • QDateTimeEdit:编辑和显示日期时间的组件;
  • QCalendarWidget:一个用日历形式选择日期的组件;

定时器

需要引入的头文件 #include <QTimer>

QTimer:定时器,用来处理周期性事件的一种对象,类似于硬件定时器,例如设置一个定时器的定时周期为1000毫秒,那么每1000毫秒就会发射定时器的timeout()信号,在信号关联的槽函数里就可以做相应的处理。

日期显示格式符

  • d:天,不补零显示 1-31;
  • dd:天,补零显示 01-31;
  • M:月,不补零显示;
  • MM:月,补零显示;
  • yy:年,两位显示 00-99;
  • yyyy:年,四位显示 2024;
  • h:小时,不补零 0-23或1-12(如果显示AP/PM) ;
  • hh:小时,补零2位显示0-23或1-12(如果显示AP/PM);
  • H:小时,不补零 0-23(即使显示AP/PM);
  • HH:小时,补零 00-23(即使显示AP/PM);
  • m:分钟,不补零;
  • mm:分钟,补零;
  • z:毫秒 不补零 0-999;
  • zzz:毫秒 补零3位显示 000-999;
  • AP或A:使用Am/pm显示;
  • ap或a:使用am/pm显示;

图片示例

代码示例
DateTimeDialog.h

cpp 复制代码
#ifndef DATETIMEDIALOG_H
#define DATETIMEDIALOG_H

#include <QDialog>
#include <QTimer>
namespace Ui
{
    class DateTimeDialog;
}

class DateTimeDialog : public QDialog
{
    Q_OBJECT

public:
    explicit DateTimeDialog(QWidget* parent = nullptr);
    ~DateTimeDialog();

public slots:
    void on_pushButton_clicked();

    void on_pushButtonSetTime_clicked();

    void on_pushButtonSetDate_clicked();

    void on_pushButtonSetDateTime_clicked();

    void on_calendarWidget_selectionChanged();

    void timeOutMethod();

private slots:
    void on_pushButtonStart_clicked();

    void on_pushButtonStop_clicked();

private:
    Ui::DateTimeDialog* ui;

    QTimer* timer;
};

#endif // DATETIMEDIALOG_H

DateTimeDialog.cpp

cpp 复制代码
#include "DateTimeDialog.h"
#include "ui_DateTimeDialog.h"

DateTimeDialog::DateTimeDialog(QWidget* parent)
    : QDialog(parent)
    , ui(new Ui::DateTimeDialog)
{
    ui->setupUi(this);
    timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(timeOutMethod()));
    ui->pushButtonStop->setEnabled(false);
    ui->spinBox->setSuffix("ms");
    ui->spinBox->setMaximum(10000000);
    ui->spinBox->setMinimum(100);
}

DateTimeDialog::~DateTimeDialog()
{
    delete ui;
}

void DateTimeDialog::on_pushButton_clicked()
{
    //获取当前时间
    QDateTime curDateTime = QDateTime::currentDateTime();
    ui->timeEdit->setTime(curDateTime.time());
    ui->editTime->setText(curDateTime.toString("hh:mm:ss"));
    ui->dateEdit->setDate(curDateTime.date());
    ui->editDate->setText(curDateTime.toString("yyyy-MM-dd"));
    ui->dateTimeEdit->setDateTime(curDateTime);
    ui->editDateTime->setText(curDateTime.toString("yyyy-MM-dd hh:mm:ss"));
}


void DateTimeDialog::on_pushButtonSetTime_clicked()
{
    QString str = ui->editTime->text();
    str = str.trimmed();
    QDateTime dateTime = QDateTime::fromString(str, "hh:mm:ss");
    ui->timeEdit->setTime(dateTime.time());
}


void DateTimeDialog::on_pushButtonSetDate_clicked()
{
    QString str = ui->editDate->text();
    str = str.trimmed();
    QDateTime dateTime = QDateTime::fromString(str, "yyyy-MM-dd");
    ui->dateEdit->setDate(dateTime.date());
}


void DateTimeDialog::on_pushButtonSetDateTime_clicked()
{
    QString str = ui->editDateTime->text();
    str = str.trimmed();
    QDateTime dateTime = QDateTime::fromString(str, "yyyy-MM-dd hh:mm:ss");
    ui->dateTimeEdit->setDateTime(dateTime);
}


void DateTimeDialog::on_calendarWidget_selectionChanged()
{
    QDate dt = ui->calendarWidget->selectedDate();
    QString str = dt.toString("yyyy-MM-dd");
    ui->editCalendar->setText(str);
}

void DateTimeDialog::timeOutMethod()
{
    QTime curTime = QTime::currentTime();
    ui->lcdNumberH->display(curTime.hour());
    ui->lcdNumberM->display(curTime.minute());
    ui->lcdNumberS->display(curTime.msec());
}


void DateTimeDialog::on_pushButtonStart_clicked()
{
    timer->setInterval(ui->spinBox->value());
    timer->start();
    ui->pushButtonStop->setEnabled(true);
    ui->pushButtonStart->setEnabled(false);
}


void DateTimeDialog::on_pushButtonStop_clicked()
{
    timer->stop();
    ui->pushButtonStop->setEnabled(false);
    ui->pushButtonStart->setEnabled(true);
}
相关推荐
王老师青少年编程6 小时前
2025年【江苏“信息与未来”编程思维】真题及题解(T2:坐标变换)
c++·题解·真题·坐标变换·编程思维·江苏·信息与未来
西门吹-禅8 小时前
java springboot N+1问题
java·开发语言·spring boot
skywalk81639 小时前
设计并实现段言的 C FFI 绑定机制 @Trae
c语言·开发语言·python·编程
2023自学中9 小时前
C++ 内存追踪器
linux·c++
IT笔记10 小时前
【Rust】Rust Match 模式匹配详解
java·开发语言·rust
2zcode10 小时前
免费开源项目文档:基于MATLAB卷积神经网络的口罩佩戴检测系统
开发语言·matlab·cnn
逝水无殇10 小时前
C# 运算符重载详解
开发语言·后端·c#
QiLinkOS11 小时前
QiLinkOS报告:行业风险导航系列《中国技术大败局》新能源汽车篇(3)
物联网·智能制造·dna双螺旋归因模型·qilinkos报告·技术专利避坑指南·专利分析·qilink
2501_9139817811 小时前
物联网智慧安防通信方案解析:NB-IoT、LoRa与5G技术在安防场景中的应用
物联网·5g
TPBoreas11 小时前
配置信息防泄露方案:.env 环境隔离详解(dotenv-java)
java·开发语言