QT实现Digital Clock

QT实现Digital Clock

Demo 实现DigitalClock类,该类继承自QLCDNumber,实现电子表的界面和逻辑,核心逻辑为借助QTimer,定时更新空间界面。以下为程序实现

digitalclock.h

#ifndef DIGITALCLOCK_H
#define DIGITALCLOCK_H

#include 

class QTimer;

class DigitalClock : public QLCDNumber
{
    Q_OBJECT

public:
    DigitalClock(QWidget *parent = 0);
    ~DigitalClock() {}

    QString FormatStr() const {return m_TimeFormatStr;}
    void setFormatStr(const QString &FormatStr = QString("hh:mm:ss"));
    void InitTimer(int millisecond = 1000);

private slots:
    void showTime();

private:
    QString m_TimeFormatStr;
    QTimer *m_Timer;
};

#endif // DIGITALCLOCK_H

digitalclock.cpp

#include "digitalclock.h"


#include <QTimer>
#include <QTime>

DigitalClock::DigitalClock(QWidget *parent)
    : QLCDNumber(parent)
{
    setWindowTitle("Digital Clock");
    setSegmentStyle(QLCDNumber::Flat);
    setFormatStr();

    InitTimer();

    showTime();

     Qt::WindowFlags f;
     f |= (Qt::MSWindowsFixedSizeDialogHint|Qt::FramelessWindowHint);
     setWindowFlags(f);//set window frameless
     move(0,0);//move to the top-left corner of screen

     setFixedSize(200, 60);//set windowsize to fixed size
}

void DigitalClock::showTime()
{
    QTime time = QTime::currentTime();
    QString str = time.toString(m_TimeFormatStr);
    display(str);
}

void DigitalClock::setFormatStr(const QString &FormatStr)
{
    m_TimeFormatStr = FormatStr;
    setDigitCount(m_TimeFormatStr.length());
}

void DigitalClock::InitTimer(int millisecond)
{
    m_Timer = new QTimer(this);
    m_Timer->start(millisecond);
    connect(m_Timer, SIGNAL(timeout()), this, SLOT(showTime()));
}

上面的代码做了一些优化,比如:

     Qt::WindowFlags f;
     f |= (Qt::MSWindowsFixedSizeDialogHint|Qt::FramelessWindowHint);
     setWindowFlags(f);//set window frameless
     move(0,0);//move to the top-left corner of screen
    setFixedSize(200, 60);//set windowsize to fixed size

这段代码设置程序窗口无边框,大小固定且位置固定在屏幕左上角。所以构造函数的第一句设置窗口标题是看不到的:

 setWindowTitle("Digital Clock");

程序中

void DigitalClock::InitTimer(int millisecond)
{
    m_Timer = new QTimer(this);
    m_Timer->start(millisecond);
    connect(m_Timer, SIGNAL(timeout()), this, SLOT(showTime()));
}

该函数初始化一个定时器,默认间隔1000ms,使用connect()函数关联定时器超时信号timeout()和界面更新函数showTime(),实现时间的更新。

connect(m_Timer, SIGNAL(timeout()), this, SLOT(showTime()));

运行效果:
QT实现Digital Clock_第1张图片

参考

QT Digital Clock Example

你可能感兴趣的:(qt,qt)