界面隻有一個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;
}