XX学信息工程学院
桌面时钟设计实现实报告
桌面时钟设计实现
学 号
姓 名
专业班级
指导教师
实践日期
2014年1月6日2014年1月17日
目 录
综合训练目求 1
二综合训练务 1
(1)需求分析 1
(2)务 1
三总体设计 2
(1)模块划分 2
(2)模块说明 2
四详细设计说明 3
(1)类图 3
(2)设计说明 3
(3)具体类说明 3
①calender类 3
②mainclock类 4
③main类 4
五调试测试 4
(1)第次调试 4
(2)第二次调试 5
(3)第三次调试 6
(4)第四次调试 7
(5)调试 8
六实日志 10
七实总结 12
八附录:核心代码清单 13
(1)日历部分代码 13
(2)圆盘时钟部分代码 14
(3)电子时钟部分代码 17
(4)总体布局部分代码 19
(5)函数部分代码 21
综合训练目求
次面象编程实践学C++面象程序设计进行必实践性环节种原信息理信息系统专业学年安排实考试周务点繁重课综合训练目务:
1 重温加深 C++面象编程语言基知识理解掌握
2 掌握 C++语言编程程序调试基技
3 利网络资源学MFC者Qt等相关软件页面进行布局
4 学会协作进行软件设计遇分歧时够处理完成实践求
二综合训练务
(1)需求分析
着计算机普计算机求远初进行型数运算复杂数分析间日常交流交易等等通计算机完成日常品然想起舒服电脑桌面美观实需求达定程度现生活节奏快希短时间完成事获取信息量计算机工作时时解时间错行程安排会电脑桌面安装显示时间日历工具桌面时钟需求挺
(2)务
●桌面时钟日常工具良机界面应该做
●采面象思想设计实现种类
●涉界面运界面设计选择采QT做界面设计
●够通学运带函数实现功
●实期间完成负责部分代码编写调试完成规范实文
三总体设计
(1)模块划分
图 1 模块
(2)模块说明
圆盘时钟:指圆盘时钟说时针分针秒针显示时钟模块中需绘制时针
电子时钟:定义电子表样显示时钟部分秒更新次显示出
日历:日历显示前日历查询前日历
整体布局:整体布局时分水布局垂直布局水布局布局圆盘时钟电子时钟行排列组合日历布局垂直布局完成圆盘时钟电子时钟单布局垂直布局完成
四详细设计说明
(1)类图
图 2 类图
(2)设计说明
圆盘时钟:指圆盘时钟说时针分针秒针显示时钟模块中需绘制时针伴完成具体实现程限解先默认原点坐标移动中心处然分画刷填充等定义指针形状颜色分画出时针分针秒针读取前时间指针段时间应该旋转角度计算设定构成圆盘时钟
电子时钟:定义电子表样显示时钟部分秒更新次显示出默认状态显示数字位数(包括间号)5时候显示时分钟先改8位格式时分钟秒钟显示出
日历:日历显示前日历查询前日历首先日历创建表格布局设置成布局尺寸变说日历布局会着窗口拉改变setGridVisible(true)表格线设置显示样日历版面网格线较适合家审美惯日历表添加表格布局中算初步完成日历表格显示
然总体模块三部分整体布局缺重模块便整体布局整体布局时分水布局垂直布局水布局布局圆盘时钟电子时钟行排列组合日历布局垂直布局完成圆盘时钟电子时钟单布局垂直布局完成
(3)具体类说明
*前面已提伴负责部分块做说明*
①calender类
Calender类实现日历显示继承QT里基类QWidget定义public成员变量calender()声明日历构造函数Private成员变量createPreviewGroupBox()声明日历框中函数设计两函数:
1calender()设计日历类实现创建日历表格创建表格布局象基设置
2createPreviewGroupBox()设计日历表格框里布局日历导入表格布局中表格布局添加窗口部件日历查询分组框中
②mainclock类
Mainclock类实现总体布局圆盘时钟电子时钟日历机结合起机界面友美观继承基类情况定义public成员变量mainclock源文件中进行详细设计说明首先窗口类设计窗口标题库函数中Qdate获取前时间便程序进行然创建圆盘时钟象圆盘时钟总布局中位置显示进行具体设置设置分组框标题次设置前日期(年月日)创建电子时钟象电子时钟前日期设垂直布局组合圆盘时钟布局水布局创建日历象日历添加布局中详细设计见代码算完成总体布局
③main类
类类组合起总程序服务控制整桌面时钟运行
五调试测试
(1)第次调试
图(图3)示第次调试结果简单日历部分加入布局
图 3 第次调试结果
(2)第二次调试
图4示第二次调试结果圆盘时钟电子时钟框架先布置
图 4 第二次调试结果
(3)第三次调试
图5示第三次调试结果圆盘时钟电子时钟加入布局显示日历部分
图 5 第三次调试结果
(4)第四次调试
图6示第四次调试结果第三次调试结果基础伴做圆盘时钟加入布局理器
图 6 第四次调试结果
(5)调试
图7图8调试结果两样选时间段样电子时钟两号显示着没显示秒钟样秒更新次秒显示次
图 7 调试1
图 8 调试2
六实日志
工作日志日安排进度完成情况感想什
表格 1 工作日志
日期
实容
201416
天写实施计划书未两周安排明确实目安装Qt堆教程种教程关MFC关Qt总查资料发现实机房应该安装需软件然天安装太麻烦太费事天感觉毫头绪找着干什开始
201417
天学Qt分析决定Qt写前安装Qt知道版问题什问题学拷安装电脑机房保护卡发现机房操作系统天止完成项目总体设计模块划分负责桌面时钟显示日历部分整体布局分析讨实现想功设计日历时钟三针数字时钟等等类
201418
早着老师简单解MFC胡老师说找熟悉Qt老师抽时间讲讲等天呐摸索总费时间肯定会干等着什干负责部分动手进行整体构思具体实现开始简单编写午4点时候耿楠老师介绍QT参考资料
201419
昨天午耿楠老师资料现开始模仿QT里面示例敲程序刚里面关时钟日历样例参考示例里日历结合想效果进行修改示例中需日历部分写部分代码构建执行时出现1 error Qt Creator 需设置编译器构建构建套件选项里设置编译器错误没找着解决方法
2014110
昨天编译器问题没解决直接新建工程写代码拷贝通网查找资料解库函数象方法功然编写代码天初步完成日历部分代码开始着手进行布局
2014113
天真痛苦白天实晚基11点复马三门考试着充实生活实心里毛想着实做完想着考试通天写布局部分考虑美观起舒心布局时商量决定日历放面面左边放圆盘时钟(名字喜欢样较形象)右边放电子时钟
2014114
天稍微布局相关资料便赶紧完成实毕竟周已考试搞点慌慌老师知道天考试家复老师较开明没说什天实没做什实质性东西
2014115
早考Web没实晚考试额意思说天午背书两天什干意思老师应该捏汗边实边复考试两边耽误兼顾起困难先考试顾抽时间赶实
2014116
试考完放包袱轻轻松松做实事天程序部分基完成写实文亿图软件画基图形准备明天早答辩实文写做什流水账似写遍想说话表达出
2014117
昨晚答辩PPT赶出天答辩日子
七实总结
次面象编程实收获首先认识身知识欠缺前学C语言C++面象编程语言时没学基础知识扎实做起困难重重次实两合作实程中通示例合作伴帮忙概东西做出次更加系统复面象编程思想
面象专指程序设计中采封装继承抽象等设计方法
程序员眼里世界类象构成类描述组相特性(属性)相行(方法)象程序中类实际数类型面程语言面相象语言区面程语言允许程序员定义数类型程序中置数类型模拟真实世界更解决问题需创建解决问题必需数类型面象编程提供解决方案运类封装继承等实现程序功
次课题桌面时钟设计实现部实现三功分圆盘时钟电子时钟日历三模块间肯定进行定排版布局通良整体布局桌面时钟日常工具会较受欢迎谁喜欢着眼东西
编写代码程中思考类实现参数传封装类脑子里面全局布局写时候较效率
整实程中合作伴帮助特查资料明白问般解决学少东西查找网资源次特
总言次实时间安排意完成两周充实天基没空闲时间说白连洗衣服时间没时学团队合作啊编程熟悉
八附录:核心代码清单
*代码颜色改吧着较清晰层次*
(1)日历部分代码
calendarh:
#ifndef CALENDAR_H
#define CALENDAR_H
#include
类指针进行声明没实例化
QT_BEGIN_NAMESPACE
class QCalendarWidget
class QGridLayout
class QGroupBox
QT_END_NAMESPACE
class Calendar public QWidget
{
Q_OBJECT 宏加入该宏QT中singleslot机制
public
Calendar() 声明日历构造函数
private
void createPreviewGroupBox() 声明创建预览日历框中函数
QGroupBox *previewGroupBox QGroupBox窗口部件提供标题组合框
QGridLayout *previewLayout QGridLayout表格布局
QCalendarWidget *calendar QCalendarWidget提供基月份日历户选择前日期
}
#endif CALENDAR_H
calendarcpp
#include calendarh
#include
#include
*日历构造函数*
CalendarCalendar()
{
createPreviewGroupBox() 创建日历表格
QGridLayout *layout new QGridLayout 新建表格布局象
layout>addWidget(previewGroupBox) 日历表格添加表格布局中
layout>setSizeConstraint(QLayoutSetFixedSize) 固定表格布局尺寸变
setLayout(layout) 设置布局
}
*创建日历表格*
void CalendarcreatePreviewGroupBox()
{
calendar new QCalendarWidget 获日历象
calendar>setGridVisible(true) 显示日历表格中表格线
新建QGroupBox窗口部件标题日历查阅
previewGroupBox new QGroupBox(tr(日历查阅))
previewLayout new QGridLayout 新建表格布局
previewLayout>addWidget(calendar 0 0 QtAlignRight)
previewLayout>addWidget(calendar 0 0 QtAlignCenter) 日历象放入坐标(00)处居中齐
setLayout方法带日历表格布局添加窗口部件日历查询分组框中
previewGroupBox>setLayout(previewLayout)
}
(2)圆盘时钟部分代码
clockh
#ifndef CLOCK_H
#define CLOCK_H
#include
class Clock public QWidget
{
Q_OBJECT
public
int hour
int minute
int second
Clock(QWidget *parent0)
virtual ~Clock()
private
void paintEvent(QPaintEvent *event)
}
#endif CLOCK_H
clockcpp
#include
#include
#include Clockh
#include
#include
ClockClock(QWidget *parent) QWidget(parent)
{
QTimer *timenew QTimer()定义定时器
connect(timeSIGNAL(timeout())thisSLOT(update()))信号槽
time>start(1000)刷新周期1s
}
Clock~Clock()
{
}
void ClockpaintEvent(QPaintEvent *event)
{
int size qMin(width()height())获取窗口长度
QTime tQTimecurrentTime()获取前系统时间
QPainter paint(this)
定义指针颜色
QColor hourColor(1270127)
QColor minuteColor(0 127 127 191)
QColor secondColor(000)
Clock myclock
myclockhourthour()
myclockminutetminute()
myclocksecondtsecond()
paintsetRenderHint(QPainterAntialiasing)掉锯齿边缘滑
painttranslate(width()2height()2)设置原点坐标位置
paintscale(size200size200)设置缩放例
定义时针形状
static const QPoint hourHand[4]
{
QPoint(5 0)
QPoint(09)
QPoint(5 0)
QPoint(0 50)
}
刻画时针
paintsetPen(QtNoPen)设置画笔颜色
paintsetBrush(hourColor)设置画刷颜色(填充色)
paintsave()
paintrotate(300 * ((myclockhour+ myclockminute 600)))设置次刷新时时针转动角度
paintdrawConvexPolygon(hourHand4)刻画时针
paintrestore()
定义分针形状
static const QPoint minuteHand[4]
{
QPoint(5 0)
QPoint(09)
QPoint(5 0)
QPoint(0 70)
}
刻画分针
paintsetPen(QtNoPen)
paintsetBrush(minuteColor)
paintsave()
paintrotate(60 * (myclockminute+ myclocksecond 600))
paintdrawConvexPolygon(minuteHand4)
paintrestore()
定义秒针形状
static const QPoint secondHand[4]
{
QPoint(40)
QPoint(0 9)
QPoint(40)
QPoint(090)
}
刻画秒针
paintsetPen(QtNoPen)
paintsetBrush(secondColor)
paintsave()
paintrotate(60*(myclocksecond))
paintdrawConvexPolygon(secondHand4)
paintrestore()
定义时点刻度形状
static const QPoint hourNode[4]
{
QPoint(098)
QPoint(092)
QPoint(395)
QPoint(395)
}
刻画表盘
paintsetPen(hourColor)
paintsetBrush(hourColor)
for (int i 0 i < 12 ++i)
{
paintdrawLine(88 0 96 0)
paintdrawConvexPolygon(hourNode4)
paintrotate(300)
}
paintsetPen(minuteColor)
for (int j 0 j < 60 ++j)
{
if ((j 5) 0)
paintdrawLine(92 0 96 0)
paintrotate(60)
}
}
(3)电子时钟部分代码
digitaiclockh
*定义电子表头文件*
#ifndef DIGITALCLOCK_H
#define DIGITALCLOCK_H
#include
#include
#include
#include
class DigitalClock public QLCDNumber
{
Q_OBJECT
public
DigitalClock(QWidget *parent 0)
private slots
void showTime()
private
bool showColon标志变量
}
#endif DIGITALCLOCK_H
digitaiclockcpp
#include digitalclockh
#include
#include
DigitalClockDigitalClock(QWidget *parent)QLCDNumber(parent)
{
this>setDigitCount(8)设置输出显示8位默认5位
this>setNumDigits(8)
QTimer *timernew QTimer()
connect(timerSIGNAL(timeout())thisSLOT(showTime()))
timer>start(1000)
showColontrue
}
void DigitalClockshowTime()
{
QTime timeQTimecurrentTime()
QString strTime
if(showColon)
{
strTimetimetoString(hhmmss)
showColonfalse
}
else
{
strTimetimetoString(hh mm ss)
showColontrue
}
display(strTime)
}
(4)总体布局部分代码
mainclockh
#ifndef MAINCLOCK_H
#define MAINCLOCK_H
#include
class MainClock public QWidget
{
Q_OBJECT
public
MainClock(QWidget *parent 0)
}
#endif MAINCLOCK_H
mainclockcpp
#include mainclockh
#include clockh
#include digitalclockh
#include calendarh
#include
#include
#include
#include
#include
#include
MainClockMainClock(QWidget *parent) QWidget(parent)
{
this>setWindowTitle(桌面时钟)
this>setWindowTitle(QStringfromLocal8Bit(桌面时钟)) QT版需转换编码
QDate date QDatecurrentDate() 获取前时间
QString text1 datetoString(tr( yyyy年MM月dd日)) 获指定格式日期
QString text2 datetoString(tr( dddd)) 获指定格式星期
*显示时钟表*
Clock *clocknew Clock 定义时钟表象
QGroupBox *groupbox1new QGroupBox(tr(时钟表)) 新建时钟表分组框
QVBoxLayout *layout1new QVBoxLayout 新建垂直布局理器
layout1>addWidget(clock) 时钟表象加入垂直布局理器中
groupbox1>setLayout(layout1) 垂直布局理器加入时钟表分组框中
QFont font1 groupbox1>font()获时钟表分组框标题字体象
font1setPointSize(12) 设置字体12
font1setBold(true) 设置字体加粗
groupbox1>setFont(font1) 分组框标题改设置font象
*显示前日期*
QLabel *label1new QLabel(text1) 新建标签类(前日期年月日)
QLabel *label2new QLabel(text2) 新建标签类(星期)
QGroupBox *groupbox2new QGroupBox(tr(天)) 新建前日期天分组框
QVBoxLayout *layout2new QVBoxLayout 新建垂直布局理器
layout2>addWidget(label1) 标签类加入垂直布局理器
layout2>addWidget(label2)
groupbox2>setLayout(layout2) 垂直布局理器layout2加入天分组框中
QFont font4 groupbox2>font() 设置天分组框标题样式
font4setPointSize(12)
font4setBold(true)
groupbox2>setFont(font4)
QFont font2 label1>font() *设置前日期显示样式*
font2setPointSize(24)
font2setBold(true)
label1>setFont(font2)
QPalette palette1 定义调色板
palette1setColor(QPaletteWindowTextQtred) 指定颜色红色
label1>setPalette(palette1) 指定调色板颜色应标签1(年月日)
QFont font3 label2>font() *设置星期显示样式*
font3setPointSize(24)
font3setBold(true)
label2>setFont(font3)
QPalette palette2
palette2setColor(QPaletteWindowTextQtred)
label2>setPalette(palette2)
*显示电子时钟*
DigitalClock *digitalClocknew DigitalClock 定义电子表象
QVBoxLayout *layout3new QVBoxLayout 新建垂直布局理器layout3
layout3>addWidget(groupbox2) 天分组框加入垂直布局理器layout3中
layout3>addWidget(digitalClock) 电子时钟加入垂直布局理器layout3中
*时钟表前日期电子时钟加入水布局理器layout4*
QHBoxLayout *layout4new QHBoxLayout
layout4>addWidget(groupbox1)
layout4>addLayout(layout3)
*显示日历*
Calendar *calendarnew Calendar
QVBoxLayout *layout5new QVBoxLayout 新建垂直布局理器存放容器
layout5>addLayout(layout4)
layout5>addWidget(calendar)
setLayout(layout5) 设置布局
layout5>setSizeConstraint(QLayoutSetMinAndMaxSize)
QFont font5 calendar>font() 设置日历边框字体样式
font5setPointSize(12)
font5setBold(true)
calendar>setFont(font5)
resize(500490)
}
(5)函数部分代码
maincpp
#include
#include
#include mainclockh
int main(int argc char *argv[])
{
QApplication a(argc argv)
MainClock clock
clockshow()
return aexec()
}
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档