QT5笔记: 16. 时间和定时器的常用功能

时间和定时器组件
格式化时间的字符

  • 例子

    #ifndef WIDGET_H
    #define WIDGET_H
    #include <QTime>
    #include <QTimer>
    #include <QWidget>
    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_btnGetTime_clicked();
    void on_btnSetTime_clicked();
    void on_btnSetDate_clicked();
    void on_btnSetDateTime_clicked();
    void on_calendarWidget_selectionChanged();
    /**
    * @brief on_timer_timeOut
    * @note 定时器超时的槽函数
    */
    void on_timer_timeOut();
    void on_btnStart_clicked();
    void on_btnStop_clicked();
    void on_btnSetInterval_clicked();
    private:
    Ui::Widget *ui;
    /**
    * @brief timer 定时器timer
    */
    QTimer *timer;
    /**
    * @brief timeCounter 计时器
    */
    QTime timeCounter;
    };
    #endif // WIDGET_H
    #include "widget.h"
    #include "ui_widget.h"
    #include <QTimer>
    Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
    {
    ui->setupUi(this);
    timer = new QTimer(this);
    timer->stop();
    connect(timer, SIGNAL(timeout()), this, SLOT(on_timer_timeOut()));
    }
    Widget::~Widget()
    {
    delete ui;
    }
    /**
    * @brief Widget::on_btnGetTime_clicked
    * @note 获取本地时间,并显示在文本框中
    */
    void Widget::on_btnGetTime_clicked()
    {
    QDateTime curDateTime = QDateTime::currentDateTime();
    QString date = curDateTime.toString("yyyy-MM-dd");
    QString time = curDateTime.toString("HH:mm:ss");
    QString dateTime = curDateTime.toString("yyyy-MM-dd HH:mm:ss");
    ui->editDate->setText(date);
    ui->dateEdit->setDate(curDateTime.date());
    ui->editTime->setText(time);
    ui->timeEdit->setTime(curDateTime.time());
    ui->editDateTime->setText(dateTime);
    ui->dateTimeEdit->setDateTime(curDateTime);
    }
    /**
    * @brief Widget::on_btnSetTime_clicked
    * @note 获取文本框中的内容,然后转换为时间
    */
    void Widget::on_btnSetTime_clicked()
    {
    QString timeStr = ui->editTime->text();
    QTime time = QTime::fromString(timeStr, "HH:mm:ss");
    ui->timeEdit->setTime(time);
    }
    /**
    * @brief Widget::on_btnSetDate_clicked
    * @note 获取文本框中的内容,然后转换为日期
    */
    void Widget::on_btnSetDate_clicked()
    {
    QString dateStr = ui->editDate->text();
    QDate date = QDate::fromString(dateStr, "yyyy-MM-dd");
    ui->dateEdit->setDate(date);
    }
    /**
    * @brief Widget::on_btnSetDateTime_clicked
    * @note 获取文本框中的内容,然后转换为时间和日期
    */
    void Widget::on_btnSetDateTime_clicked()
    {
    QString dateTimeStr = ui->editDateTime->text();
    QDateTime dateTime = QDateTime::fromString(dateTimeStr, "yyyy-MM-dd HH:mm:ss");
    ui->dateTimeEdit->setDateTime(dateTime);
    }
    /**
    * @brief Widget::on_calendarWidget_selectionChanged
    * @note 获取日期控件的所选择的日期,然后设置到文本框
    */
    void Widget::on_calendarWidget_selectionChanged()
    {
    QDate date = ui->calendarWidget->selectedDate();
    ui->editDateCalendar->setText(date.toString("yyyy-MM-dd"));
    }
    /**
    * @brief Widget::on_timer_timeOut
    * @note timer的超时事件,QT的timer要手动去定义timer、槽,手动去写connect
    */
    void Widget::on_timer_timeOut()
    {
    ui->lcdH->display(QTime::currentTime().hour());
    ui->lcdM->display(QTime::currentTime().minute());
    ui->lcdS->display(QTime::currentTime().second());
    }
    /**
    * @brief Widget::on_btnStart_clicked
    * @note 启动timer,并设置控件是否禁用
    */
    void Widget::on_btnStart_clicked()
    {
    timer->start();
    timeCounter.start();
    ui->btnStart->setEnabled(false);
    ui->btnSetInterval->setEnabled(false);
    ui->btnStop->setEnabled(true);
    }
    /**
    * @brief Widget::on_btnStop_clicked
    * @note 停止timer,并设置控件是否禁用
    */
    void Widget::on_btnStop_clicked()
    {
    timer->stop();
    int time = timeCounter.elapsed();
    int second = time / 1000;
    int miniSec = time % 1000;
    QString str = QString::asprintf("%d\" %d",second, miniSec);
    ui->label_8->setText(str);
    ui->btnStart->setEnabled(true);
    ui->btnSetInterval->setEnabled(true);
    ui->btnStop->setEnabled(false);
    }
    /**
    * @brief Widget::on_btnSetInterval_clicked
    * @note 设置timer的interval
    */
    void Widget::on_btnSetInterval_clicked()
    {
    int value = ui->spinBox->value();
    timer->setInterval(value);
    }
  • 界面
    时间和timer的界面


__EOF__

本文作者echo_lovely
本文链接https://www.cnblogs.com/echo-lovely/p/17219525.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   echo_lovely  阅读(96)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示