面向对象编程实践—桌面时钟的设计(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();}
- 面向对象编程实践—桌面时钟的设计(Qt实现)
- 面向接口设计和编程——(面向对象、面向接口、面向过程、面向实现)
- Qt面向对象的设计( 一)
- QT:面向对象的Qt编程
- 面向对象设计和过程式编程(6.2)《深入PHP:面向对象、模式与实践》
- PHP面向对象编程 面向对象的基本实践
- PHP面向对象编程 面向对象的高级实践
- PHP面向对象编程 面向对象的特殊实践
- 面向对象编程的实践感想
- Scala 的面向对象编程实践(一)
- Scala 的面向对象编程实践(二)
- Scala 的面向对象编程实践(三)
- 【Qt入门实践】时钟的多种实现方式
- 深入PHP面向对象、模式与实践——让面向对象编程更加灵活的模式(2)
- 深入PHP面向对象、模式与实践——让面向对象编程更加灵活的模式(3)
- 面向对象的设计法则(2)——针对接口编程,而非(接口的)实现
- 面向对象设计UML实践
- JavaScript面向对象编程实践
- 使用SD卡根文件系统
- Java服务器开发基础知识select、poll、epoll iocp, kqueue
- oracle 基础查询
- ANDROID IOS对字体加粗
- Zombie process
- 面向对象编程实践—桌面时钟的设计(Qt实现)
- 关于DNS服务器的配置问题(推荐)
- 高效 Ini文件访问类(C#编写,用于Windows Mobile)
- 高尔夫球的表面为什么凹凸不平?
- 手动使用sql profile来进行执行计划的稳固
- 基于imx25开发板音频驱动理解
- cocos2d-x 实现按Home和待机键后,再进入游戏显示暂停界面
- Interview on 20111201
- 一个打印日志的C宏定义——TRACEOUT