Qt5 趣学(2):电子钟

/*----------------------撸代码式-----------------------*/
/*----------------------clock.h-----------------------*/
#ifndef DIGICLOCK_H
#define DIGICLOCK_H

#include <QLCDNumber>

class DigiClock : public QLCDNumber
{
    Q_OBJECT
private:
    QPoint dragPosition;    // 保存鼠标点相对电子时钟窗体左上角的偏移值
    bool showColon;         // 用于显示时间时是否显示“:”
public:
    DigiClock(QWidget *parent = 0);
    void mousePressEvent(QMouseEvent *vent);
    void mouseMoveEvent(QMouseEvent *event);
public slots:
    void showTime();    // 显示当前时间

};

#endif // DIGICLOCK_H
/*---------------------clock.cpp----------------------*/
#include "digiclock.h"
#include <QTimer>
#include <QTime>
#include <QMouseEvent>
#include <QPalette>

// 构造函数
DigiClock::DigiClock(QWidget *parent) :
    QLCDNumber(parent)
{
    /* 设置时钟背景 */
    // 完成电子时钟窗体背景色的设置
    QPalette p = palette();
    p.setColor(QPalette::Window,Qt::black);  // 背景色为蓝色
    setPalette(p);
    // 设置窗体的标识,此处设置窗体为一个没有面板边框和标题栏的窗体
    setWindowFlags(Qt::FramelessWindowHint);
    // 设置窗体的透明度为0.5,即半透明
    setWindowOpacity(0.5);

    QTimer *timer = new QTimer(this);   // 新建一个计时器对象
    connect(timer,SIGNAL(timeout()),this,SLOT(showTime()));
    timer -> start(1000);   // 以1000毫秒为周期启动定时器

    showTime();         // 初始时间显示
    resize(150,60);     // 设置电子时钟显示的尺寸
    showColon = true;   // 初始化
}

// 鼠标事件(鼠标按下响应函数)
void DigiClock::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
    {
        dragPosition = event->globalPos()-frameGeometry().topLeft();
        event -> accept();
    }
    if(event->button() == Qt::RightButton)
    {
        close();
    }
}

// 鼠标事件(鼠标移动响应函数)
void DigiClock::mouseMoveEvent(QMouseEvent *event)
{
    if(event->buttons() & Qt::LeftButton)
    {
        move(event->globalPos()-dragPosition);
        event -> accept();
    }
}

// showTime槽函数
void DigiClock::showTime()
{
    // 获取当前的系统时间,保存在一个QTime对象中
    QTime time = QTime::currentTime();
    // 把获取的当前时间转换为字符串类型
    QString text = time.toString("hh:mm");
    // showColon:控制电子时钟“时”与“分”之间的表示秒钟的两个点的闪显功能
    if(showColon)
    {
        text[2] = ':';
        showColon = false;
    }
    else
    {
        text[2] = ' ';
        showColon = true;
    }
    display(text);  // 显示转换好的字符串时间
}
/*----------------------main.cpp----------------------*/
#include "digiclock.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    DigiClock clock;
    clock.show();

    return a.exec();
}

你可能感兴趣的:(qt5)