利用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()将会覆盖信息,不能追加显示
}

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

(0)

相关推荐

  • Qt实现简易秒表设计

    Qt–简易秒表设计(QTimer,Qtime,TableWiget应用),供大家参考,具体内容如下 效果图 使用QTimer和QTime两个类 思路: 1.计时功能:​ 利用QTimer中的定时器中断信号,设置每10毫秒触发一次timeout信号,在对应槽函数中对LCD number中显示的时间进行更新,即LCD屏中每十毫秒更新一次:对于时间的累加显示(QTimer是定时器)需要Qtime,在每一次timeout信号出发时,使Qtime类的time累加上10ms. 部分关键代码如下(代码并非连续

  • QT实现秒表项目

    本文实例为大家分享了QT实现秒表项目的具体代码,供大家参考,具体内容如下 源代码目录 mainwindow.ui窗口设计 mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include<QTime> #include<QTimer> namespace Ui { class MainWindow; } class MainWindow : public QMai

  • 基于实现Qt秒表设计

    基于Qt秒表设计 这个只是虚拟机下的Dialog中设计的秒表,大家感兴趣的可以根据自己手机的秒表界面来设计,亦或是有别的想法也可以在ui中添加函数,或者是在ui界面自己添加调整.本篇将给除了给出Qt秒表设计例子之外还会为大家提供一些常用函数. 一.Qt绘图系统简介 Qt的绘图系统允许使用相同的API在屏幕和其它打印设备上进行绘制.整个绘图系统基于 QPainter,QPainterDevice和QPaintEngine三个类. QPainter用来执行绘制的操作: QPaintDevice则允许

  • Qt编写秒表功能

    本文实例为大家分享了Qt编写秒表的具体实现代码,供大家参考,具体内容如下 文件widget.h #ifndef WIDGET_H #define WIDGET_H #include<QTimer> #include <QWidget> #include<QString> #include<QTime> namespace Ui { class Widget; }   class Widget : public QWidget {     Q_OBJECT  

  • Qt实现简易计时器的示例代码

    目录 一.项目介绍 二.项目基本配置 三.UI界面设计 四.主程序实现 4.1 mainwindow.h头文件 4.2 mainwindow.cpp源文件 五.效果演示 一.项目介绍 计时器实现四个功能:开始计时.停止计时.暂停计时以及打点.当点击暂停时,开始按钮和停止按钮无法点击,此时暂停按钮变为继续.当点击停止时,开始按钮和暂停按钮无法点击,此时停止按钮变为清零. 二.项目基本配置 新建一个Mainwindow界面.基本配置与其他Qt项目类似,这里不过多介绍. 三.UI界面设计 UI界面如下

  • QT设计秒表功能(跑步计时器)

    本文实例为大家分享了QT设计秒表功能的具体代码,供大家参考,具体内容如下 设计目标 1. 定时器开始 2.复位从0开始计时 3.记录--把记录的时间添加到QTextBrowser, append(时间) 4. QTime t(0,0,0)   t = t.addMsec( number )  t.toString (“hh:mm:ss:zzz”) 定时器(QTimer)的使用 定时器---定时发送信号timeoutQTimer 定时器类 1.创建定时器类对象QTimer mtimer; 2.把定

  • PyQt5实现暗黑风格的计时器

    本文实例为大家分享了PyQt5实现暗黑风格的计时器的具体代码,供大家参考,具体内容如下 主要是学习多线程知识,使用的是QTime(),但是似乎用QThread()更多一些 (QThread()与QTimer()的优势不再赘述) 但是记下来总没错 QSS渲染使用的是qdarkstyle,因为我一直觉得这个暗黑风很帅 qdarkstyle在GitHub上一千多颗星,还是很受欢迎的 import sys from PyQt5.QtCore import * from PyQt5.QtGui impor

  • 用QT实现计时器功能

    本文实例为大家分享了QT实现计时器功能的具体代码,供大家参考,具体内容如下 首先新建工程,Ctrl+N->Application(Qt)->Qt Widgets Application,然后进入设置界面,名称和路径随意就好:Build System不考虑性能用qmake比较简单:剩下的采用默认选项就行. 初始化结束后,其项目文件组织如下 Timer.pro 此为工程文件 Headers 用于存放头文件的目录 Sources 用于存放源代码 Forms 用于存放.ui文件,即界面设计文件 双击F

  • 利用QT设计秒表功能

    本文实例为大家分享了QT设计秒表功能的具体代码,供大家参考,具体内容如下 一.窗口界面的设置 可以使用属性栏digitCount来设计此时0的初始位置 二.代码的编写 1.确定时间->每间隔一秒调用一个update函数(进行换算)或者直接调用QT里面的time类:2.确定显示的方式:3.每间隔一段时间调用显示来达到动态效果:4.这里应该查看Qtime/Qlcd的help手册5.在对定时器声明时要注意需要声明成指针,后面的槽函数发出信号者要求是指针类型:6.利用基准时间与当前时间的差值来显示计时器

  • 利用Qt实现可扩展对话框的示例代码

    目录 一.项目介绍 二.项目基本配置 三.UI界面设计 四.主程序实现 4.1 dialog.h头文件 4.2 dialog.cpp源文件 五.效果演示 可扩展对话框通常用于用户对界面有不同要求的场合.通常情况下,只出现在基本对话窗体:当供高级用户使用或需要更多信息时,可通过某种方式的切换显示完整对话窗体(扩展窗体).切换的工作通常由一个按钮完成. 一.项目介绍 实现一个简单填写资料的对话框.通常情况下,只需要填写姓名和性别.若有特殊需要,还需要填写更多信息时,则切换至完整对话窗体,完整对话窗体

  • java实现秒表功能

    利用javax.swing.Timer类设计并实现一个模拟秒表功能的应用程序.程序中显示不断递增的时间,同时包含允许用户启动和终止计时功能的代码,以及一个可将时间复位为0的按钮. import javax.swing.*; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.BorderLayout;  import java.util.TimerTask;   impo

  • 基于QT设计一个春联自动生成器

    目录 1. 前言 2. 实现原理 3. 示例代码 3.1 获取春联接口 3.2 数据解析代码 3.3 token数据存储 1. 前言 春节是中国最隆重的传统节日,一到过年家家户户肯定是要贴春联:在春节前夕,会用大红纸张,加上浓墨书写祝福词语,在春节当天贴于门框两边,寓意着一年吉祥如意,还会将福字倒转贴于门上,有"福到临门"的意思.为了方便找到合适的春联句子,我这里就采用现成的自然语言处理接口实现了一个自动生成春联的软件,输入提示词就可以完成春联的生成,方便写春联时参考. 下面是实现的效

  • 利用Redis实现点赞功能的示例代码

    目录 MySQL 和 Redis优缺点 1.Redis 缓存设计及实现 部分代码如下 Redis 存储结构如图 2.数据库设计 3.开启定时任务持久化存储到数据库 部分代码如下 提到点赞,大家一想到的是不是就是朋友圈的点赞呀?其实点赞对我们来说并不陌生,我们经常会在手机软件或者网页中看到它,今天就让我们来了解一下它的实现吧.我们常见的设计思路大概分为两种:一种自然是用 MySQL 等数据库直接落地存储, 另外一种就是将点赞的数据保存到 Redis 等缓存里,在一定时间后刷回 MySQL 等数据库

  • Android实现APP秒表功能

    本文实例为大家分享了Android实现APP秒表功能的具体代码,供大家参考,具体内容如下 这几天一直在看安卓,也正好赶上老师布置的作业,所以就做了一个秒表.自己参考了一下别人的图标,有了一些灵感所以顺便也设计了一下界面.下面先贴一下秒表的界面: 打开秒表后的第一个界面 点击开始计时,开始键变为暂停,记录和停止开始变实: 点击记录: 记录满了之后自动上移,通过滑动可以查看前面的: 点击暂停: 停止: 重新开始和记录: 双击返回键退出: 下面贴出Activity的代码: package com.ex

随机推荐