用QT实现桌面时钟设计doc.docx
- 文档编号:15529910
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:28
- 大小:356.13KB
用QT实现桌面时钟设计doc.docx
《用QT实现桌面时钟设计doc.docx》由会员分享,可在线阅读,更多相关《用QT实现桌面时钟设计doc.docx(28页珍藏版)》请在冰点文库上搜索。
用QT实现桌面时钟设计doc
西北农林科技大学信息工程学院
面向对象实习实习报告
题目:
桌面时钟设计与实现
学号
XX
专业班级
指导教师
实践日期
一、综合训练目的与要求
正文这次面向对象实习实践活动是在C++面向对象程序设计之后进行的实践环节旨在加深对面向对象编程的设计思想(类的设计,抽象,封装,包含与继承,多态性,UML图)的理解,掌握使用C++编程的基本的技能,从而能通过小型的团队开发一些小软件的实现与设计,并能够解决一定的实际问题。
以及掌握撰写规程序设计文档的能力,还有训练语言组织与表达能力,提高综合能力。
二、综合训练任务
1、需求分析
随着科学技术的不断发展,计算机已经成为了我们日常工作生活和学习中不可缺少的工具,很多人每天都使用计算机与外界进行交互,为了让用户对计算机有更舒心的体验,桌面的个性化是必不可少,因此很有必要设计美观使用的桌面的小软件,来让计算机更加人性化,二当今社会是信息时代,生活节奏也随即加快,而一个美观的能提示显示时间和日历的小软件能让人们合理安排自己的行程,避免不必要的损失,因此桌面时钟有一定的需求性。
2、任务实现
(1)良好的人机交互界面是用户所亲睐的。
(2)使用QTCreater来开发该界面程序。
(3)采用面向对象的思想实现时钟类、设置类的封装和与实现
(4)实现软件界面的布局
(5)为了实现不同类之间的联系提供类的接口。
(6)实现对代码的编写和调试工作,每天记录实习日志
(7)独立完成论文并进行答辩。
三、总体设计
1、整体功能设计
图3-1-1
图3-1-1是整体功能的设计,为了界面的整洁性和强化界面的显示采取以上的功能模型组合。
增强可视化和人性化,用户可以自己更改时间和更改日历的显示的样式以及一些其他的操作。
2、各部件介绍:
(1)主窗口实现窗口布局包含了数字时钟部件、日历部件、时间部件、和菜单。
(2)日历设置窗口实现窗口布局包含了日历样式设置和常规设置部件。
(3)时间设置窗口实现窗口的布局包含了时间Edit和刻度时钟动态实现更改时间设置。
3、整体UML图:
图3-3-1
图3-3-1是程序整体的UML图由于属性太多因此省略掉了属性和操作。
以程序中每个类之间的联系进行组合,反映出程序中结构和整体的框架。
便于后期编程。
四、详细设计说明
1、主窗口类(UML图):
图4-1-1
图4-1-1是主窗口的UML图主要给用户可视界面进行布局和各个部件的创建和组合。
最后通过设置菜单对不同的部件及实例化的类-对象进行设置和优化。
2.日期时间属性类
图4-2-1
图4-2-1是日期时间属性窗口类的UML图,主要功能是获取时间和设置时间以及创建布局和label
放置动态的时间信息。
最主要的是提供一个槽函数控制时间的动态性。
3、刻度时钟的类(UML)
图4-3-1
图4-3-1实现的是刻盘时钟窗口类实现。
主要的实现的功能是表盘的绘制和表针的绘制。
而表盘的绘制功能使用的QWidget中的虚函数paintEvent的实现
五、调试与测试
1、主窗口框架调试:
图5-1-1
图5-1-1是对住窗口框架的布局,刚开始设计布局的时候不太了解三种布局和组合框的创建,但是进过后面对Qt的GUI类的了解慢慢的了解了布局和组合框架之间的联系。
经过多次调错,最后把4个组合框按照自己的想法进行了布局。
图5-1-2
图5-1-2实现了时间日期的显示,最初的做法是在直接弹出一个label显示日期时间。
最后把label封装一个窗口类然后吧,该窗口加载到主窗口中最后显示成功。
图5-1-3
图5-1-3是通过我的小伙伴编写好的日历窗口类放入我所编写的主窗口中最后达到了想要的结果。
没有实现动态设置日历的样式。
图5-1-4
图5-1-4是通过我的小伙伴编写好的日历窗口类和数字时钟窗口类放入我所编写的主窗口的运行效果图,而数字时钟没有实现更改功能。
图5-1-5
图5-1-5是从网络上查到的刻度时钟的执行样式,通过对其代码的编写和理解。
明白了其中的原理,是利用了计算机图形学的知识执行了不旋转变换并且利用了timer中的timeout和timestat进行控制,实现时钟的动态显示。
图5-1-6
图5-1-6是实现了刻度表盘的主窗口,时钟的数字也是通过确定一块固定大小的像素块进行编写文本,然后把文本中的字符(数字)在该固定的像素块上显示,通过旋转变换实现数字在表盘上的绘制。
通过点画绘制非凹形的图形。
实现了表针的设置。
图5-1-7
图5-1-7实现了对所有部件的组装和布局,个性化界面实现已经固定了。
六、实习日志
七、实习总结
八、附录:
核心代码清单
displayTime.h
#ifndefDISPLAYTIME_H
#defineDISPLAYTIME_H
#include
#include
classDisplayTime:
publicQLabel{
Q_OBJECT
public:
DisplayTime();
voidDateSet(constQDateTimedate);
QDateTimeDateGet();
~DisplayTime();
privateslots:
voidupdateTime();
private:
QDateTime*DateTime;
};
#endif//DISPLAYTIME_H
displayTime.cpp
#include"displayTime.h"
#include
#include
DisplayTime:
:
DisplayTime()
:
QLabel(){
QTimer*timer=newQTimer;
connect(timer,SIGNAL(timeout()),this,SLOT(updateTime()));
timer->start(1000);
DateSet(QDateTime:
:
currentDateTime());
updateTime();
//timeLabel->show();
}
DisplayTime:
:
~DisplayTime(){
deleteDateTime;
}
voidDisplayTime:
:
DateSet(constQDateTimedate){
DateTime=newQDateTime(date);
}
QDateTimeDisplayTime:
:
DateGet(){
return*DateTime;
}
voidDisplayTime:
:
updateTime(){
this->setText(QDateTime:
:
currentDateTime().toString("今天是yyyy年MM月dd日--hh:
mm:
ss"));
}
shapedclock.h
#ifndefSHAPEDCLOCK_H
#defineSHAPEDCLOCK_H
#include
#include
#include
classShapedClock:
publicQWidget
{
Q_OBJECT
public:
ShapedClock(QWidget*parent=0);
QSizesizeHint()const;
~ShapedClock();
voidsetTime(constQTime);
QTimegetTime();
publicslots:
//voidsettTime(QTimet);
private:
QTime*time;
protected:
voidpaintEvent(QPaintEvent*event);
};
#endif
shapedclock.cpp
#include
#include"shapedclock.h"
ShapedClock:
:
ShapedClock(QWidget*parent)
:
QWidget(parent)//出现了一点问提
{
QTimer*timer=newQTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(update()));
timer->start(1000);
}
voidShapedClock:
:
paintEvent(QPaintEvent*){
staticconstQPointhourHand[4]={
QPoint(7,8),
QPoint(0,20),
QPoint(-7,8),
QPoint(0,-50)
};
staticconstQPointminuteHand[4]={
QPoint(7,8),
QPoint(0,20),
QPoint(-7,8),
QPoint(0,-68),
};
staticconstQPointsecondHand[4]={
QPoint(7,8),
QPoint(0,20),
QPoint(-7,8),
QPoint(0,-83)
};
staticconstQPointtest[4]={
QPoint(88,-2),
QPoint(96,-2),
QPoint(96,2),
QPoint(88,2)
};
QTime*time=newQTime(QTime:
:
currentTime());
QColorhourColor(127,0,127);
QColorminuteColor(0,127,127,191);
QColorsecondColor(0,127,127,80);
intside=qMin(width(),height());
QPainterpainter(this);
painter.setRenderHint(QPainter:
:
Antialiasing);
painter.translate(width()/2,height()/2);
painter.scale(side/200.0,side/200.0);
painter.setPen(Qt:
:
NoPen);
painter.setBrush(hourColor);
painter.save();
painter.rotate(30.0*((time->hour()+time->minute()/60.0)));
painter.drawConvexPolygon(hourHand,4);
painter.restore();
painter.setPen(hourColor);
for(inti=0;i<12;++i){
if(i==0)
painter.drawText(-20,-86,40,40,
Qt:
:
AlignHCenter|Qt:
:
AlignTop,
QString:
:
number(12));
elsepainter.drawText(-20,-86,40,40,
Qt:
:
AlignHCenter|Qt:
:
AlignTop,
QString:
:
number(i));
if(i%3==0){
painter.drawConvexPolygon(test,4);
}
elsepainter.drawLine(88,0,96,0);
painter.rotate(30.0);
}
painter.setPen(Qt:
:
NoPen);
painter.setBrush(minuteColor);
painter.save();
painter.rotate(6.0*(time->minute()+time->second()/60.0));
painter.drawConvexPolygon(minuteHand,4);
painter.restore();
//test
painter.setPen(Qt:
:
NoPen);
painter.setBrush(secondColor);
painter.save();
painter.rotate(6.0*(time->minute()*60+time->second()));
painter.drawConvexPolygon(secondHand,4);
painter.restore();
//test
painter.setPen(minuteColor);
for(intj=0;j<60;++j){
if((j%5)!
=0)
painter.drawLine(92,0,96,0);
painter.rotate(6.0);
}
}
//voidShapedClock:
:
setTime(QTimet=QTime:
:
currentTime()){
//*time=t;
//}
ShapedClock:
:
~ShapedClock(){
deletetime;
}
voidShapedClock:
:
setTime(constQTimeT=QTime:
:
currentTime()){
time=newQTime(T);
}
QTimeShapedClock:
:
getTime(){
return*time;
}
QSizeShapedClock:
:
sizeHint()const
{
returnQSize(200,200);
}
timeset.h
#ifndefTIMESET_H
#defineTIMESET_H
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include"shapedclock.h"
classtimeSet:
publicQWidget
{
Q_OBJECT
public:
timeSet(QWidget*parent,ShapedClock*clock);
~timeSet();
QSizesizeHint()const;
voidcreateClockGBox();
//这里实现盒子和布局实现页面的框架函数
publicslots:
boolChangeTime();
private:
ShapedClock*clock;
QGroupBox*ClockGBox;
QTimeEdit*dateset;
QPushButton*save;
QPushButton*cancel;
QGridLayout*ClockLayout;
QGridLayout*PushButton;
//在这里添加部
};
#endif//TIMESET_H
timeset.cpp
#include
#include"timeset.h"
timeSet:
:
timeSet(QWidget*parent,ShapedClock*oclock)
:
QWidget(parent){
clock=oclock;
createClockGBox();
dateset->setDisplayFormat("HH:
mm:
ss");
dateset->setTime(QTime:
:
currentTime());
QGridLayout*DateSetLayout=newQGridLayout;
DateSetLayout->addWidget(ClockGBox,0,0);
setWindowTitle("TimeSetWidget");
setLayout(DateSetLayout);
connect(save,SIGNAL(clicked()),this,SLOT(ChangeTime()));
connect(cancel,SIGNAL(clicked()),this,SLOT(close()));
}
voidtimeSet:
:
createClockGBox(){
ClockGBox=newQGroupBox("时间设置");
ClockLayout=newQGridLayout;
clock=newShapedClock;
dateset=newQTimeEdit;
save=newQPushButton;
cancel=newQPushButton;
save->setText("保存");
cancel->setText("取消");
PushButton=newQGridLayout;
PushButton->addWidget(save,0,0);
PushButton->addWidget(cancel,0,1);
ClockLayout->addWidget(clock,0,0);
ClockLayout->addWidget(dateset,1,0);
ClockLayout->addLayout(PushButton,2,0);
ClockGBox->setLayout(ClockLayout);
}
timeSet:
:
~timeSet(){
}
//实现见面的框架函数
booltimeSet:
:
ChangeTime(){
QTimedatetimes;
datetimes=dateset->time();
SYSTEMTIMEst;
GetSystemTime(&st);
st.wHour=datetimes.hour()-8;
//st.wHour=10;
st.wMinute=datetimes.minute();
st.wSecond=datetimes.second();
this->close();
returnSetSystemTime(&st);
}
QSizetimeSet:
:
sizeHint()const
{
returnQSize(200,300);
}
mainWindow.h
#ifndefMAINWINDOW_H
#defineMAINWINDOW_H
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include"shapedclock.h"
#include"displayTime.h"
classmainWindow:
publicQWidget
{
Q_OBJECT
public:
mainWindow(QWidget*parent=0);
~mainWindow();
publicslots:
voidopenCSet();
voidopenTSet();
private:
voidcreateDateGBox();
voidcreateCalendarGBox();
voidcreateClockGBox();
voidcreateDClockGBox();
QGroupBox*DateGBox;
QGroupBox*ClockGBox;
QGroupBox*DClockGBox;
QGroupBox*CalendarGBox;
QVBoxLayout*DateLayout;
QVBoxLayout*CalendarLayout;
QVBoxLayout*ClockLayout;
QVBoxLayout*DClockLayout;
DisplayTime*date;
ShapedClock*clock;
QTimer*timer;
//创建菜单
QMenu*popMenu;
QAction*addCalendarAction;
QAction*addDateAction;
QAction*addTimeAction;
QAction*quitAction;
Widget*win;
timeSet*tSWin;
QCalendarWidget*calendar;
};
#endif//mainWindow
mainWindow.cpp
#include
#include
#include
#include"mainWindow.h"
#include"digitalclock.h"
#include"shapedclock.h"
#include"displayTime.h"
#include
#include
#include
#include
#include
#include
mainWindow:
:
mainWindow(QWidget*parent)
:
QWidget(parent){
//QPalettepal=palette();
//pal.setColor(QPalette:
:
Background,QColor(0x00,0xff,0x00,0x00));
//setPalette(pal);
//setAttribute(Qt:
:
WA_TranslucentBackground,true);
//setWindowOpacity(0);
calendar=newQCalendarWidget;
timer=newQTimer;
win=newWidget(calendar);
setContextMenuPolicy(Qt:
:
ActionsContextMenu);
quitAction=newQAction(tr("退出"),this);
addAction(quitAction);
connect(quitAction,SIGNAL(triggered()),this,SLOT(close()));
addDateAction=newQAction(tr("日历设置"),this);
addAction(addDateAction);
connect(addDateAction,SIGNAL(triggered()),this,SLOT(openCSet()));
addTimeAction=newQAction(tr("时间设置"),this);
addAction(addTimeAction);
connect(addTimeAct
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- QT 实现 桌面 时钟 设计 doc