桌面時鐘的小例子

轉自:http://kb.cnblogs.com/a/2204261/

#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_NAMESPACE
class QCalendarWidget;
class QGridLayout;
class QGroupBox;
QT_END_NAMESPACE

class Calendar : public QWidget
{
    Q_OBJECT

public:
    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_OBJECT

public:
    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_OBJECT

public:
    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();
}

==========================================效果圖如下===========================================


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章