简单的Qt倒计时程序--番茄钟

为了方便在电脑上使用番茄钟,自己写了一个简单的Qt程序,用到了QLCDNumber显示剩余时间,Timer定时器发射定时信号,QPushbutton开始按钮。

点击开始工作会开始倒计时,为了方便观看加了一个霸道的窗口置顶,切换应用后也永远在顶端显现。
在这里插入图片描述

25分钟结束后倒计时界面变红,再次点击开始工作重新进入倒计时。
在这里插入图片描述

总之,程序相当简单,界面也就只有一个lcd显示屏+一个按钮。主要是为了窗口置顶功能,省了平常还要使用deskpin的麻烦233333.

把代码放上来:只更改了widget.h和widget.cpp文件,main.cpp及.pro文件并未修改。
widget.h

#ifndef WIDGET_H
#define WIDGET_H


#include <QWidget>
#include <QDialog>
#include <QLCDNumber>
#include <QVBoxLayout>
#include <QPushButton>




class Widget : public QWidget
{
    Q_OBJECT


public:
    Widget(QWidget *parent = 0);
    ~Widget();
signals:
public slots:
    void onTimeout();
    void clickOnButton();
private:
    QLCDNumber *lcd;
    QTimer *timer;
    int minute=25,second=0;
    QVBoxLayout *layout;
    QPushButton *startbutton;
};


#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include <QtGui>
#include <QLCDNumber>
#include <QTime>
#include <QTimer>
#include <QVBoxLayout>


Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    lcd=new QLCDNumber();
    lcd->setDigitCount(5);
    lcd->setMode(QLCDNumber::Dec);
    lcd->setSegmentStyle(QLCDNumber::Flat);


    timer=new QTimer();
    timer->setInterval(1000);
    timer->start();


    startbutton=new QPushButton("开始工作");
    connect(startbutton,SIGNAL(clicked(bool)),this,SLOT(clickOnButton()));


    QVBoxLayout *layout = new QVBoxLayout();
    layout->addWidget(lcd);
    layout->addWidget(startbutton);


    this->setLayout(layout);
    this->resize(400,200);
    this->setWindowFlag(Qt::WindowStaysOnTopHint);
    //this->setWindowFlags(Qt::Widget | Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowStaysOnTopHint);
}

Widget::~Widget(){}

void Widget::onTimeout(){
    QString s_minute=QString::number(minute);
    QString s_second=QString::number(second);
    if (s_minute.length()==1)   s_minute="0"+s_minute;
    if(s_second.length()==1)    s_second="0"+s_second;
    QString disp=s_minute+":"+s_second;
    lcd->display(disp);
    //QTime time = QTime::currentTime();
    //lcd->display(time.toString("mm:ss"));
    if((minute!=0)|(second!=0)){
        if(second==0){
            second=59;
            minute--;}
        else
            second--;
    }
    else
        lcd->setStyleSheet("background-color:red");
    //lcd->display(QTime::currentTime().toString(QString::number(minute)+":"+QString::number(second)));
}

void Widget::clickOnButton(){
    this->minute=25;
    this->second=0;
    disconnect(timer,SIGNAL(timeout()),this,SLOT(onTimeout()));
    connect(timer,SIGNAL(timeout()),this,SLOT(onTimeout()));
    this->lcd->setStyleSheet("background-color:white");
}

最后一点:
不知道为什么,如果使用timer->stop代替disconnect的话,会莫名进入到加速状态。第一次点击开始按钮,正常倒计时;第二次点击开始,每秒显示的数字其实是减2…;第N次每秒数字减N。没搞明白为什么timer明明stop了却好像还在计时?不过最后采用断开槽连接之后确实没问题了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值