轉自: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(); }
==========================================效果圖如下===========================================