QT-实现实时时间、计时器

一、显示效果

        1.显示实时时间

        2.实现计时、暂停、重置、打点

二、使用库、函数

        需要使用下面这两个库其中QTime是代表事件类的,比如获取现在的时间,或者时间增加,QTimer是定时器类的函数,其中包含了开始定时,暂停定时等。

#include <QTime>
#include <QTimer>

        使用函数:

        设置时间值:setHMS(int h, int m, int s, int ms),元素代表小时、分、秒、毫秒

        获取现在时间:QTime::currentTime();

        开启定时器计时start(30);计时30ms,每到30ms会触发信号timeout()

        增加时间值:addMSecs(30);

        暂停定时器:stop();

        其他函数: buf = buf.asprintf("%d:",i);,i是一个int类型变量,将其转换为buf所在类型变量,比如这里的buf是QString类型,因此就是把i变为QString类型

三、ui界面的实现

        

        其中现在时间和计时器时间显示界面用的是label组件,label组件也可以进行写入,使用函数setText()

ui ->timertxt->setText(qtime->toString("hh:mm:ss:zzz"));

        显示框用的是Plain Text Edit需要选择readonly,其余按钮采用pushbuttton

四、 逻辑功能实现

        4.1实时时间显示

        在头文件中定义:

    QTime *qtime;
    QTime *current_time;
    QTimer *qtimer;
    QTimer *current_timer;

        在Widget的构造函数中我们初始化一个current_time = new QTime和current_timer =new QTimer分别作为现在时间值和现在时间用的定时器,这里我们将*current_time赋值为现在时间,并开启现在时间定时器

    *current_time = QTime::currentTime();
    current_timer->start(30);

        然后将现在时间显示到ui上

    ui ->nowtimetxt->setText(current_time->toString("hh:mm:ss"));

        使用setText将时间转化为String格式并且是“hh:mm:ss”就是10:50:30代表10点50分30秒

        这时我们将timeout()信号量关联到其槽函数,以便于更新我们的实时时间

    connect(current_timer,SIGNAL(timeout()),this,SLOT(now_time_SLOT()));

        我们需要将槽函数now_time_SLOT()函数放在头文件的private slots:中,因为这是手动关联的槽函数,自动关联的槽函数系统会帮我们自动放入

        下面是我们的槽函数,就是每30ms进入中断槽函数的时候我们只需要将*current_time增加30ms即可,因为这是特殊的类型并不是int,因此我们不能直接加减而是使用其库提供的函数,然后将新的数值更新在显示界面即可

void Widget::now_time_SLOT()
{
    *current_time = current_time->addMSecs(30);
    ui->nowtimetxt->setText(current_time->toString("hh:mm:ss"));
}

4.2 计数器功能开始、暂停

        与上述实时时间显示功能类似,也是通过显示初始值,开启定时器,增加时间,再显示来完成的,不同的就是这里开启定时器在开始按键的槽函数中实现。

        先将初始时间设置为0,0,0,0,然后显示到界面,然后关联槽函数

    qtime ->setHMS(0,0,0,0);
    //label使用setText来设置
    ui->timertxt->setText("00:00:00:00");
    //设置定时器槽函数
    connect(qtimer,SIGNAL(timeout()),this,SLOT(timeout_slot()));

        这里我们只需要将开关按键槽函数分别设置为开关定时器即可,当定时器时间到达,上述槽函数会触发,然后再对时间进行增加,更新即可

void Widget::on_startbt_clicked()
{
    qtimer->start(30);
}

void Widget::on_stopbt_clicked()
{
    qtimer->stop();
}
void Widget::timeout_slot()
{
    *qtime = qtime->addMSecs(30);
    ui ->timertxt->setText(qtime->toString("hh:mm:ss:zzz"));

}

        4.3 重置

        首先我们暂停定时器,然后将显示值清零即可,这里我们把后面打点的界面也清除了

void Widget::on_resetbt_clicked()
{
    qtimer->stop();
    qtime ->setHMS(0,0,0,0);
    ui ->timertxt->setText(qtime->toString("hh:mm:ss:zzz"));
    ui->plainTextEdit->clear();

}

        4.4打点

        打点操作为了记录现在是打的第几个点、打点的相对时间

void Widget::on_bitbt_clicked()
{
    i++;
    QString buf;
    buf = buf.asprintf("%d:",i);
    ui ->plainTextEdit->appendPlainText(buf);
    ui->plainTextEdit->appendPlainText(qtime->toString("hh:mm:ss:zzz"));
}

  • 12
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Qt Creator实现计时器的基本步骤: 1. 创建一个新的Qt Widgets应用程序项目。 2. 打开主窗口的ui文件(.ui),在设计视图中添加一个标签(QLabel)和两个按钮(QPushButton),分别命名为“lblTime”、“btnStart”和“btnStop”。 3. 打开主窗口的头文件(.h),添加以下代码: ``` c++ #include <QMainWindow> #include <QTimer> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void on_btnStart_clicked(); void on_btnStop_clicked(); void on_timer_timeout(); private: Ui::MainWindow *ui; QTimer *timer; int timeCount; }; ``` 在这个头文件中,我们包含了QMainWindow和QTimer类,并声明了三个私有槽函数,一个指针变量和一个整型变量。 4. 打开主窗口的源文件(.cpp),添加以下代码: ``` c++ #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); timeCount = 0; timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(on_timer_timeout())); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_btnStart_clicked() { timer->start(1000); // 1秒钟触发一次 } void MainWindow::on_btnStop_clicked() { timer->stop(); timeCount = 0; ui->lblTime->setText(QString("00:00:00")); } void MainWindow::on_timer_timeout() { timeCount++; QTime time = QTime::fromString(QString("00:00:00"), "hh:mm:ss"); time = time.addSecs(timeCount); ui->lblTime->setText(time.toString("hh:mm:ss")); } ``` 在这个源文件中,我们实现了三个槽函数,分别响应“开始”、“停止”按钮的点击事件和计时器的超时事件。在构造函数中,我们初始化了计时器时间计数器。在“开始”按钮的槽函数中,我们启动计时器,并设置它每隔1秒钟触发一次。在“停止”按钮的槽函数中,我们停止计时器、清零时间计数器,并将标签文本设置为“00:00:00”。在计时器的超时事件槽函数中,我们将时间计数器加1,根据时间计数器计算当前的时间,并将文本设置为格式化的“hh:mm:ss”字符串。 5. 编译并运行程序,可以看到一个简单的计时器界面。点击“开始”按钮可以开始计时,点击“停止”按钮可以停止计时并将时间清零。 这就是使用Qt Creator实现计时器的基本步骤。如果需要实现更复杂的计时器功能,可以根据需要添加其他控件和逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值