QLCDNumber制作的超简单计时器,按下空格键暂停。

界面只有一个QLCDNumber。启动程序,开始计时,按下空格键暂停,再次按下空格键继续计时。可以用于练琴计时的朋友。
在这里插入图片描述

#include "dialog.h"
#include "ui_dialog.h"
#include <QKeyEvent>
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    m_timer = new QTimer;

    m_secCnt = 0;
    m_minCnt = 0;
    m_hourCnt = 0;
    connect(m_timer,SIGNAL(timeout()),this,SLOT(onTimeOut()));
    m_timer->start(1000);
    m_stopped = false;
    setFocus();

    ui->lcdNumber->setDigitCount(12);
    /*
        小时,分钟,秒数各占2个,两个间隔都是空格+冒号+空格,一共12个字节
        如果这里设置的长度过大,左边有空白,不美观
    */
    ui->lcdNumber->setMode(QLCDNumber::Dec);
    ui->lcdNumber->setFixedSize(720,240);
}

void Dialog::keyPressEvent(QKeyEvent * e){
    if(e->key() == Qt::Key_Space){
        if(!m_stopped){

            m_timer->stop();
            m_stopped = true;
            disconnect(m_timer,SIGNAL(timeout()),this,SLOT(onTimeOut()));
        }
        else{
            connect(m_timer,SIGNAL(timeout()),this,SLOT(onTimeOut()));
            m_timer->start(1000);
            m_stopped = false;
        }
    }
}
void Dialog::onTimeOut(){
    m_secCnt++;
    if(m_secCnt >=60) {
        m_secCnt = 0;
        m_minCnt++;
        if(m_minCnt >= 60){
            m_minCnt = 0;
            m_hourCnt++;
        }
    }
    QString hour = QString::number(m_hourCnt);
    if(hour.length()==1) hour = "0"+hour;
    QString min = QString::number(m_minCnt);
    if(min.length()==1) min = "0"+min;
    QString sec = QString::number(m_secCnt);
    if(sec.length()==1) sec = "0"+sec;
    QString str = hour +" : "+min + " : " +sec;
    ui->lcdNumber->display(str);
}
Dialog::~Dialog()
{
    delete ui;
}
发布了11 篇原创文章 · 获赞 0 · 访问量 199

猜你喜欢

转载自blog.csdn.net/shensheng100221/article/details/103671469