面向对象编程实践—桌面时钟的设计(Qt实现)

来源:互联网 发布:网络安全工程师薪资 编辑:程序博客网 时间:2024/05/22 00:14

   桌面时钟是指集数字时钟、指针时钟、桌面月历、倒计时、日记本和闹铃提醒、备忘录提醒、整点半点报时、网络对时、定时关机、天气预报、定时任务、密码保护、在线更新、锁屏保护等功能于一身的一种桌面软件。桌面时钟一般存在于桌面右侧竖列,根据软件编写的不同,具有不同的体现形式。大多数桌面时钟软件可以实现功能模块的定制,可以根据自己的需要显示不同的功能模块。桌面时钟的形态也可以通过下载的桌面时钟软件改变。

  利用Qt,仅综合实现了数字时钟,指针时钟以及日历。

#include "calendar.h"#include <QtGui>Calendar::Calendar(){    createPreviewGroupBox();    QGridLayout *layout = new QGridLayout;    layout->addWidget(previewGroupBox);    layout->setSizeConstraint(QLayout::SetFixedSize);    setLayout(layout);}void Calendar::createPreviewGroupBox(){    calendar = new QCalendarWidget;    calendar->setGridVisible(true);//是否显示日历框中的线格    previewGroupBox = new QGroupBox(tr("日历查阅"));    previewLayout = new QGridLayout;    previewLayout->addWidget(calendar, 0, 0, Qt::AlignCenter);    previewGroupBox->setLayout(previewLayout);}#ifndef CALENDAR_H#define CALENDAR_H#include <QWidget>QT_BEGIN_NAMESPACEclass QCalendarWidget;class QGridLayout;class QGroupBox;QT_END_NAMESPACEclass Calendar : public QWidget{    Q_OBJECTpublic:    Calendar();private:    void createPreviewGroupBox();    QGroupBox *previewGroupBox;    QGridLayout *previewLayout;    QCalendarWidget *calendar;};#endif // CALENDAR_H#include <QTime>#include "clock.h"Clock::Clock(QWidget *parent)    : QWidget(parent){    QTimer *timer=new QTimer(this);    timer->start(1000);    connect(timer,SIGNAL(timeout()),this,SLOT(update()));}void Clock::paintEvent(QPaintEvent *){    QPainter paint(this);    QTime time=QTime::currentTime();    paint.translate(100,100);    paint.setRenderHint(QPainter::Antialiasing);    paint.setBrush(Qt::red);    paint.setPen(Qt::red);    paint.save();    paint.rotate(6.0*time.second());    paint.drawConvexPolygon(sed,4);    paint.restore();    paint.setBrush(Qt::blue);    paint.setPen(Qt::blue);    paint.save();    paint.rotate(6.0*(time.minute()+time.second()/60.0));    paint.drawConvexPolygon(min,4);    paint.restore();    paint.setBrush(Qt::black);    paint.setPen(Qt::black);    paint.save();    paint.rotate(30.0*(time.hour()+time.minute()/60.0));    paint.drawConvexPolygon(hour,4);    paint.restore();    for(int i=0;i<12;i++)    {        paint.drawLine(0,-98,0,-90);        paint.rotate(6);        for (int j=0;j<4;j++)        {            paint.drawLine(0,-98,0,-97);            paint.rotate(6);        }    }}#ifndef CLOCK_H#define CLOCK_H#include <QtGui/QWidget>#include <QPainter>#include <QTimer>static QPoint sed[4]={QPoint(0,-70),QPoint(2,0),QPoint(0,10),QPoint(-2,0)};static QPoint min[4]={QPoint(0,-60),QPoint(4,0),QPoint(0,12),QPoint(-4,0)};static QPoint hour[4]={QPoint(0,-50),QPoint(6,0),QPoint(0,13),QPoint(-6,0)};class Clock : public QWidget{    Q_OBJECTpublic:    Clock(QWidget *parent = 0);protected:    void paintEvent(QPaintEvent *);};#endif // CLOCK_H#include "digitalclock.h"#include <QTime>DigitalClock::DigitalClock(QWidget *parent)     : QLCDNumber(parent) {     QTimer *timer = new QTimer(this);     timer->start(1000);     connect(timer, SIGNAL(timeout()), this, SLOT(showTime()));     showTime(); }void DigitalClock::showTime() {     QTime time = QTime::currentTime();     QString text = time.toString("hh:mm");     if ((time.second() % 2) == 0)         text[2] = '';     setSegmentStyle(Flat);     display(text); }#ifndef DIGITALCLOCK_H#define DIGITALCLOCK_H#include <QtGui/QDialog>#include <QLCDNumber>#include <QTimer>class DigitalClock : public QLCDNumber{    Q_OBJECTpublic:    DigitalClock(QWidget *parent = 0);private slots:    void showTime();};#endif // DIGITALCLOCK_H#include "mainclock.h"#include "clock.h"#include "digitalclock.h"#include "calendar.h"#include <QGroupBox>#include <QLabel>#include <QBoxLayout>#include <QTextCodec>#include <QDate>MainClock::MainClock(QWidget *parent)    : QWidget(parent){    QTextCodec::setCodecForTr(QTextCodec::codecForLocale()) ;//正常显示汉字    QDate date = QDate::currentDate();    QString text1 = date.toString(tr(" yyyy年MM月dd日"));    QString text2 = date.toString(tr("     dddd"));    //刻度时间    Clock *clock=new Clock;    QGroupBox *groupbox1=new QGroupBox(tr("刻度时间"));    QVBoxLayout *layout1=new QVBoxLayout ;    layout1->addWidget(clock);    groupbox1->setLayout(layout1);    QFont font1  = groupbox1->font();    font1.setPointSize(12);    font1.setBold(true);    groupbox1->setFont(font1);    //当日日期与数字时间    QLabel *label1=new QLabel(text1) ;    QLabel *label2=new QLabel(text2) ;    QGroupBox *groupbox2=new QGroupBox(tr("今天是"));    QVBoxLayout *layout2=new QVBoxLayout ;    layout2->addWidget(label1);    layout2->addWidget(label2);    groupbox2->setLayout(layout2);    DigitalClock *digitalClock=new DigitalClock ;    QVBoxLayout *layout3=new QVBoxLayout ;    layout3->addWidget(groupbox2);    layout3->addWidget(digitalClock);    QFont font2  = label1->font();    font2.setPointSize(24);    font2.setBold(true);    label1->setFont(font2);    QPalette palette1;    palette1.setColor(QPalette::WindowText,Qt::red);    label1->setPalette(palette1);    QFont font3  = label2->font();    font3.setPointSize(24);    font3.setBold(true);    label2->setFont(font3);    QPalette palette2;    palette2.setColor(QPalette::WindowText,Qt::red);    label2->setPalette(palette2);    QFont font4  = groupbox2->font();    font4.setPointSize(12);    font4.setBold(true);    groupbox2->setFont(font4);    QHBoxLayout *layout4=new QHBoxLayout ;    layout4->addWidget(groupbox1);    layout4->addLayout(layout3);    //日历查询    Calendar *calendar=new Calendar ;    QVBoxLayout *layout5=new QVBoxLayout ;    layout5->addLayout(layout4);    layout5->addWidget(calendar);    setLayout(layout5);    layout5->setSizeConstraint(QLayout::SetMinAndMaxSize);    QFont font5  = calendar->font();    font5.setPointSize(12);    font5.setBold(true);    calendar->setFont(font5);    resize(500,490) ;}#ifndef MAINCLOCK_H#define MAINCLOCK_H#include <QWidget>class MainClock: public QWidget{public :        MainClock(QWidget *parent = 0) ;};#endif // MAINCLOCK_H#include <QtGui/QApplication>#include "mainclock.h"int main(int argc, char *argv[]){    QApplication a(argc, argv);    MainClock clock;    clock.show();    return a.exec();}


原创粉丝点击