界面只有一个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;
}