利用QT设计秒表功能

 更新时间:2022年08月04日 14:12:54   作者:vampirebo  
这篇文章主要为大家详细介绍了利用QT设计秒表功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了QT设计秒表功能的具体代码,供大家参考,具体内容如下

一、窗口界面的设置

可以使用属性栏digitCount来设计此时0的初始位置

二、代码的编写

1、确定时间->每间隔一秒调用一个update函数(进行换算)或者直接调用QT里面的time类;
2、确定显示的方式;
3、每间隔一段时间调用显示来达到动态效果;
4、这里应该查看Qtime/Qlcd的help手册
5、在对定时器声明时要注意需要声明成指针,后面的槽函数发出信号者要求是指针类型;
6、利用基准时间与当前时间的差值来显示计时器;
7、设置暂停键的时候需要注意的是,可以给按键设置两个功能,分别是暂停和继续形成一个循环,但是需要注意是,当我们暂停后再继续这段时间也是计算在内的,当再次显示的时候,这时将会出现跳跃,这是因为我们显示时间的时候用的是当前时间与基准时间的差值来计算的。解决的办法是:
获取暂停前和暂停后的值,保存下来,当再次开始计算时减去这部分时间即可。
8、还有注意设置每个按键的可用性(Enabled)

代码如下:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <Qtimer>
#include <Qtime>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void updateTimeAndDisplay();    //槽函数


    void on_btn_start_clicked();

    void on_btn_stop_clicked();

    void on_btn_pause_clicked();

    void on_btn_log_clicked();

private:
    Ui::MainWindow *ui;
    QTimer *qtimer;                 //声明一个定时器对象,声明成指针对象
    QTime baseTime;                 //声明一个时间对象
    QString showStr;                //直接声明
};

#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->qtimer = new QTimer;   //实例构造
    connect(this->qtimer,SIGNAL(timeout()),this,SLOT(updateTimeAndDisplay()));
}

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

//计算基准时间和当前时间的差值来显示秒表值(currentTime)
void MainWindow::updateTimeAndDisplay()
{
    QTime current = QTime::currentTime();
    int temp = this->baseTime.msecsTo(current);   //计算差值
    QTime showTime(0,0,0,0);
    showTime = showTime.addMSecs(temp);
    showStr = showTime.toString("hh:mm:ss:zzz");  //时间转换为字符串
    this->ui->lcdNumber->display(showStr);
}
void MainWindow::on_btn_start_clicked()
{
    this->baseTime = QTime::currentTime();
    this->qtimer->start(1);
    this->ui->btn_start->setEnabled(false);    //设置按键的可用性

}

void MainWindow::on_btn_stop_clicked()
{
    if(this->ui->btn_stop->text() == "停止"){
        this->ui->btn_stop->setText("清零");
        this->qtimer->stop();
        this->ui->btn_start->setEnabled(false);
        this->ui->btn_pause->setEnabled(false);

    }else
    {
        this->ui->lcdNumber->display("00:00:00:000");
        this->ui->textBrowser->clear();
        this->ui->btn_stop->setText("停止");
        this->ui->btn_start->setEnabled(true);
        this->ui->btn_pause->setEnabled(true);

    }
}

//获取暂停前后的值求差值
void MainWindow::on_btn_pause_clicked()
{
    static QTime pauseTime;
    if(this->ui->btn_pause->text() == "暂停"){
        pauseTime = QTime::currentTime();
        this->qtimer->stop();
        this->ui->btn_pause->setText("继续");
        this->ui->btn_start->setEnabled(false);
        this->ui->btn_stop->setEnabled(false);
    }else
    {
        QTime cut = QTime::currentTime();
        int t = pauseTime.msecsTo(cut);         //求差值
        this->baseTime = baseTime.addMSecs(t);  //把暂停时间再给baseTime
        this->qtimer->start(1);
        this->ui->btn_pause->setText("暂停");
        this->ui->btn_start->setEnabled(true);
        this->ui->btn_stop->setEnabled(true);

    }

}

void MainWindow::on_btn_log_clicked()
{
    this->ui->textBrowser->append(showStr); //这里如果使用settext()将会覆盖信息,不能追加显示
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C语言中的参数传递机制详解

    C语言中的参数传递机制详解

    这篇文章主要介绍了C语言中的参数传递机制,C语言中函数参数的传递有:值传递、地址传递、引用传递这三种形式。下面我们详细探讨下
    2017-04-04
  • C++获取系统时间的三种方法

    C++获取系统时间的三种方法

    在 C++ 编程中,获取系统时间是一项常见任务,无论是记录日志、计算程序运行时间,还是实现计时功能,都需要获取当前的系统时间,本文将介绍几种在 C++ 中获取系统时间的方法,并提供相应的代码示例,需要的朋友可以参考下
    2024-09-09
  • QT设置widget背景图片不影响widget内其他控件背景的方法

    QT设置widget背景图片不影响widget内其他控件背景的方法

    这篇文章主要给大家介绍了关于QT设置widget背景图片不影响widget内其他控件背景的方法,软件的界面为了更直观或美观,常常需要通过图片来表达,需要的朋友可以参考下
    2023-06-06
  • 基于重启后消失的注册表键值的详细介绍

    基于重启后消失的注册表键值的详细介绍

    本篇文章是对重启后消失的注册表键值进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • opencv3/C++ 使用Tracker实现简单目标跟踪

    opencv3/C++ 使用Tracker实现简单目标跟踪

    今天小编就为大家分享一篇opencv3/C++ 使用Tracker实现简单目标跟踪,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • C++函数模板与重载解析超详细讲解

    C++函数模板与重载解析超详细讲解

    模板是C++最重要的设计。这篇文章讲的是函数模板,只是简单介绍模板的一些功能,关于模板的更多的内容会在类模板中详细介绍。文章还着重介绍了重载解析过程
    2022-08-08
  • Qt数据库应用之实现通用数据库清理

    Qt数据库应用之实现通用数据库清理

    项目如果需要存储很多日志记录比如运行日志,时间长了记录数量非常多,数据库体积不断增大,对应数据库表的增删改查的效率不断降低,因此需要将早期的数据清理。本文将详细介绍一下通用数据库清理的实现,需要的可以参考一下
    2022-02-02
  • C++实现消消乐游戏

    C++实现消消乐游戏

    这篇文章主要为大家详细介绍了C++实现消消乐游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • C语言详解如何实现堆及堆的结构与接口

    C语言详解如何实现堆及堆的结构与接口

    堆是计算机科学中一类特殊的数据结构的统称,通常是一个可以被看做一棵完全二叉树的数组对象。而堆排序是利用堆这种数据结构所设计的一种排序算法。本文将详细介绍堆的结构与接口,需要的可以参考一下
    2022-04-04
  • C语言 共用体(Union)详解及示例代码

    C语言 共用体(Union)详解及示例代码

    本文主要介绍C语言 共用体,这里整理了相关资料及示例代码,帮助大家学习理解此部分的知识,有兴趣的小伙伴可以参考下
    2016-08-08

最新评论