linux下QT制作的电子钟课程设计.doc_第1页
linux下QT制作的电子钟课程设计.doc_第2页
linux下QT制作的电子钟课程设计.doc_第3页
linux下QT制作的电子钟课程设计.doc_第4页
linux下QT制作的电子钟课程设计.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录 目 录 第一章 绪论 .1 1.1 选题依据 .1 1.2 主要研究内容 .2 第二章 需求分析 .3 2.1 LINUX下 QT编写的的电子钟特点.3 2.2 LINUX下 QT编写的的电子钟的功能需求.3 2.3 LINUX下 QT编写的的电子钟的性能需求.4 第三章 系统设计 .5 3.1 LINUX下 QT编写的的电子钟模块组成.5 3.2 时间显示模块的设计 .5 3.3 闹钟设置模块设计 .5 3.4 闹钟功能模块的设计.6 第四章 系统实现 .7 4.1 开发环境.7 4.2 时间显示模块的实现.8 4.3 闹钟设置模块的实现 .8 4.4 闹钟功能模块的实现 .9 第五章 系统测试 .11 5.1 测试环境 .11 5.2 功能测试 .11 5.3 性能测试 .12 第六章 结束语 .13 6.1 全文总结 .13 6.2 下一步工作 .13 6.3 附件(部分代码) .13 参考文献 .19 第一章 绪论 1 第一章第一章 绪论绪论 1.1 选题依据选题依据 面向 21 世纪的科技发展,嵌入式系统(Embedded Systems)开始进入到 IT 时代,并且稳健发展,逐步形成一个主流。嵌入式是同是以应用为中心,以计算 技术为基础,软硬件可裁剪,适于应用系统对功能、可靠性、成本、体积、功耗 等综合性严格要求的专用计算机系统。它是一个技术密集、资金密集、高度分散、 不断创新,基于硅片的知识集成系统。今天的嵌入式系统已普遍应用于国防电子、 数字家庭、工业自动化、汽车电子、医学科技、消费电子、无线通信、电力系统 等国民经济的主要行业。随着嵌入式技术的发展,嵌入式系统将更广泛地应用于 人类生活的方方面面,如:基于嵌入式 Internet 网络的电子皮肤、可以嵌入到牙 齿上的手机都在研发之中。著名嵌入式系统专家沈绪榜院士认为, “计算机是认识 世界的工具,而嵌入式系统则是改造世界的产物。 ” Linux 是一个遵循 POSIX 标准的免费操作系统,具有 BSD 和 SYSV 的扩展 特性。与其他操作系统相比,Linux 有其自身的一些特点:多任务、多用户、多 平台、使用分页技术的虚拟内存等。同时由于它源代码完全公开,用户可根据需 要自己定制自己的操作系统,从而系统能够很好的满足用户的要求。它是免费的 自由软件,用其构建的系统成本较低,而且 Linux 是单内核的操作系统,并可按 要求进行任意剪裁,因此具有很好的实时性,很强的稳定性、嵌入性的操作系统, 因此越来越多的研究人员开始采用 Linux 平台来开发自己的产品。 自由开源软件在嵌入式应用上受到青睐,Linux 日益成为主流的嵌入式操作 系统之一。可应用于多种硬件平台,Linux 采用一个统一的框架对硬件进行管理, 同时从一个硬件平台到另一个硬件平台的改动与上层无关。Linux 具有独特的内 核模块机制,它可以根据用户的需要,实时地将某些模块插入到内核中或者从内 核中移走,并能根据嵌入式设备中的个性需要量体裁衣。Linux 系统内核精简、 高效并且稳定,能够充分发挥硬件的功能,因此它比其他操作系统的运行效率更 高。Linux 是首先实现 TCP/IP 协议栈的操作系统,它的内核结构在网络方面是非 常完整的,并提供了对包括十兆位、百兆位及千兆位的以太网,还有无线网络、 Token ring(令牌环)和光纤甚至卫星的支持,这对现在依赖于网络的嵌入式设备 电子科技大学本科课程设计报告 2 来说无疑是很好的选择。 Linux 操作系统下有一个强大的图形用户界面工具包 Qt 是一个跨平台的 C+图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用 户界面所需的所用功能。Qt 是完全面向对象的,很容易扩展,并且允许真正地组 件编程。且具备面向对象、丰富的 API、强大的类等优点,这将为我们提供图形 化编程的便利。 本次我们在实验中所做的是电子时钟的设计与实现。时钟是我们日常生活中 经常用到的工具,时钟的外观和多样化能给我们的生活带来更多的方便和乐趣。 1.2 主要研究内容主要研究内容 1了解并安装 Qt,搭建好编程环境; 2使用 Qt 编写一个电子钟程序; 3该电子钟具有显示和闹钟的功能。 第二章 需求分析 3 第二章第二章 需求分析需求分析 2.1 Linux 下下 Qt 编写的的电子钟特点编写的的电子钟特点 本次设计是采用 Qt 编写的一个电子钟程序,由于 Qt 是一个跨平台的 C+图 形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面 所需的所用功能。Qt 是完全面向对象的,很容易扩展,并且允许真正地组件编程。 所以这次编写的电子钟具有很友好的显示界面,代码采用 C+编程中的结构,是 面向对象的,有利于模块化和扩展,对于后期功能的添加修改具有很良好的支持。 Linux 操作系统下的图形用户界面工具包 Qt,通过编写 Qt 代码,结合一些算法机 制,来达到实现时钟的基本功能的目的。 在本次课程设计中,比较好的把 C+与 Qt 结合起来使用。Qt 作为面向对象 的软件开发工具,它使用信号 Signal/槽 slot 机制来进行对象间的通信。信号/槽机 制是 Qt 的一个中心特征并且也许是 Qt 与其它工具包的最不相同的部分。这样便 解决了我们在用户界面上的操作,如单击某个按钮与内部对象之间的信号传输。 Qt 运行速度快、执行效率高,再加上它提供了一组更容易理解的 GUI 类,信号 与槽易使用,它所拥有的插入体系结构,使得我们可以将代码加载到一个应用中 而无需进行重新编译或重链接等优点,为我们本次设计增色不少,能使图形界面 看起来更加舒服,使用起来更加灵活。 2.2 Linux 下下 Qt 编写的的电子钟的功能需求编写的的电子钟的功能需求 本次设计的电子钟应具有以下功能: 1)能够获取系统时间并同步显示; 2)用户能够自由的设置闹钟提示的时间; 3)定好时间后时钟最小化隐藏; 4)到达指定时间时钟能够浮出提示时间已到。 电子科技大学本科课程设计报告 4 2.3 Linux 下下 Qt 编写的的电子钟的性能需求编写的的电子钟的性能需求 作为一个常见的也最简单的电子钟程序,其性能要求并不苛刻,其性能要求 如下: 1)能够时刻与系统正确时间保持同步 2)能够稳定的正确的在系统中持续运行 3)闹钟提示功能正确无误准时浮出 4)启动程序时间不超过 2 秒 5)退出程序不超过一秒 第三章 系统设计 5 第三章第三章 系统设计系统设计 3.1 Linux 下下 Qt 编写的的电子钟模块组成编写的的电子钟模块组成 在 Qt 下编写的电子钟,主要需要实现的是三大功能模块: 1)时间显示模块:该模块要求显示的界面,能够显示出系统时间并且与系统时 间保持一致。 2)闹钟设置模块:该模块提示设置闹钟时间,可以自己手动用键盘输入,也可 以使用鼠标设置时间。 3)闹钟功能模块:闹钟时间设置好以后,点击确定电子钟隐藏,并对比当前时 间与设置时间,设置时间到闹钟浮出。 系统模块组成图如图 3-1 所示: 图 3-1 电子钟模块组成图 3.2 时间显示模块的设计时间显示模块的设计 该模块要求显示的界面,能够显示出系统时间并且与系统时间保持一致。QT 中已经有 QLcdNumber 类,在该程序中建立该类的对象 LcdNumber,对该类中一 系列成员函数的修改直到达到自己的要求和电子钟显示界面的美观。对于如何保 持与系统时间同步,我们在 Alarm 对象中使用函数 clockChange()通过调用函数 lcdNumber-display()来保持与系统时间的同步。 3.3 闹钟设置模块设计闹钟设置模块设计 该模块提示设置闹钟时间,可以自己手动用键盘输入,也可以使用鼠标设置 电子科技大学本科课程设计报告 6 时间。这里必须得给使用者一个提示,提示用户手动设置闹钟时间,所以这里需 要建立一个 Label 对象,继承 Qlabel,提示用户设置闹钟。新建一个 QtimeEdit 的 对象 TimeEdit 用来方便用户手动设置时间,并新建一个 button 对象来确定设置。 3.4 闹钟功能模块的设计闹钟功能模块的设计 闹钟时间设置好以后,点击确定电子钟隐藏,并对比当前时间与设置时间, 设置时间到闹钟浮出。在 Alarm 中新建立一个成员函数 down()来控制整个窗 口的下降和隐藏,建立 Comtocur()通过对该函数的编程来实现设置时间与当前 系统时间的对比,达到监控系统时间是否到达闹钟时间的目的。若时间达到,使 用函数 dialogUp()来使窗口浮出达到闹钟报时的功能。 第四章 系统实现 7 第四章第四章 系统实现系统实现 4.1 开发环境开发环境 本次报告所编写的电子钟是在 LINUX 环境下使用 QT4.6 编写完成的,而 LINUX 操作系统我选择的是 Ubuntu10.4,这就涉及到怎样在 Ubuntu 下安装 QT,和使用 QT 实现电子钟的功能。 在 Ubuntu 下搭建 QT 的编译环境如下: 1、下载 Qt 4.6.0 for X11 OpenSource 版。 2、下载过来的是 qt-x11-opensource-src-4.6.0.tar.gz 文件,用 tar 命令解压一 下。 tar zxvf qt-x11-opensource-src-4.6.0.tar.gz 3、把这个目录移到/usr/local 目录下,改名为 qt。 4、修改(可以使用 vi 编辑器或者 gedit)自己目录下的.bash_profile 或者 .profile 或者是/etc/profile 这个文件,加入下面的代码: QTDIR=/usr/local/qt PATH=$QTDIR/bin:$PATH MANPATH=$QTDIR/man:$MANPATH LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH export QTDIR PATH MANPATH LD_LIBRARY_PATH 5、注销一下用户或者 source .bash_profile 一下,使配置文件生效。 6、进入 QT 的目录,开始编译 ./configure 输入 yes 同意 GPL/QPL 协议。 7、开始 make 这步要一两个小时 make 8、开始 install 电子科技大学本科课程设计报告 8 make install 9、进入 QT 的目录,进入 bin 目录,然后运行 ./designer,就可以看到图形界 面了。 4.2 时间显示模块的实现时间显示模块的实现 首先进入 main()函数,由于在每一个使用 Qt 的应用程序中都必须使用一个 QApplication 对象,故用 QApplication app( argc, argv )语句定义一个对象 app; 其次根据自己新定义的类 alarm 创建一个对象,系统自动进入 alarm 的构造 函数中。 在 Alarm 对象中我们首先完成对数字钟的初始化,建立初始化函数 init() , 我们在初始化中设置好时间显示模块。 成员函数: (1)setWindowTitle()设置标题的函数,我们这里把标题设置为 Alarm clock。 (2)setFixedSize(QSize(300,80) 此函数中嵌套一个 Qsize 函数是控制整个 程序窗口大小的函数,我们已经把窗口大小设置为 300,800。 (3)setFixedSize(QSize(150,50) ) 设置时间显示区域的大小,同样嵌套一 个 Qsize 函数,把显示区域控制为 150,50。 (4)setNumDigits(8)设置显示区域显示 8 个数字,如果不设置默认显示的 5 个数字。 (5)setSegmentStyle(QLCDNumber:Flat); 填充颜色,默认是白色的。 (6)display(QTime:currentTime().toString(hh:mm:ss); 设置格式,还有其 他形式的,这里我们设置为常用的 hh:mm:ss 形式。 (7)clockChange() 显示变化的时间,与系统时间保持一致。 4.3 闹钟设置模块的实现闹钟设置模块的实现 闹钟设置模块也可以在初始化函数中实现,只需要在时间显示区域旁边的区 域中设置一个设置区域。 (1)新建 QtimeEdit 的对象 TimeEdit,setDisplayFormat(hh:mm:ss) 设置闹 钟设置区域的时间显示模式。 第四章 系统实现 9 (2)新建 QPushButton 的对象 Button,显示为确定,这个 Button 对象需要 在后面信号与槽的设置中跟窗口隐藏功能这一块建立连接。 (3)利用 QSystemTrayIcon 建立托盘图标,setIcon(QIcon() 设置图标路径, show()显示图标。 4.4 闹钟功能模块的实现闹钟功能模块的实现 闹钟功能模块在 Alarm 对象下建立如下成员函数: (1)Down()在闹钟设置好以后,点击确定,整个窗口向下浮出直到隐藏; (2)Mini() 其内部调用 hide()函数,隐藏后程序最小化到托盘,在托 盘中显示 ico 图标。 (3)comToCur() 对比现在时间与闹钟设置时间,若时间相符调用窗口上浮 函数。 (4)dialogUp() 时间到了,闹钟缓缓升起来。 (5)Con() connect 信号与槽的相关设置。 该模块的实现流程图如图 4-1 所示: 电子科技大学本科课程设计报告 10 4-1 闹钟功能模块流程图 第五章 系统测试 11 第五章第五章 系统测试系统测试 5.1 测试环境测试环境 硬件环境:联想 Y510 笔记本 CPU:T 7200 内存 :2 GB 软件环境:windows win7 VMware 虚拟机 Ubuntu10.04 5.2 功能测试功能测试 界面图如图 5-1 所示: 图 5-1 电子钟的界面图 电子钟设置好时间后最小化在窗口右上角显示出小太阳的 ico: 图 5-2 电子钟最小化效果图 闹钟时间到达后电子钟界面实现缓缓浮出的动画提示效果。 经过运行测试,数字时钟完成了当初预计的要求,具有美观实用的用户界面 及正确的运行系统。钟表的时间和日期均与 LINUX 系统设定的时间相同,并保 持同步,并且可以自由的设置闹钟的时间,设置好时间后点确定,窗口隐藏,时 间到了窗口浮出,完全达到预期需求。 电子科技大学本科课程设计报告 12 5.3 性能测试性能测试 (1)持续运行 48 小时,电子钟的时间显示与系统时间完全保持一致; (2)持续运行 48 小时,电子钟未出现任何异常情况; (3)设置五次闹钟时间对闹钟提示情况进行测试,均能够正确在整点时间 浮出界面; (4)经过 5 次启动程序分别用了 1.2,1,1.8,2,2.1,平均值为 1.62 秒, 小于 2 秒,实现对程序启动时间的要求; (5)3 次退出系统分别用了 0.9,0.6,0.9,其平均值为 0.8 小于 1 秒,实现了 对退出时间的性能要求。 第六章 结束语 13 第六章第六章 结束语结束语 6.1 全文总结全文总结 本次课程设计,在 QT4 环境下编写程序,由于之前从没有学习过关于 QT 方 面的知识,相比于以前的设计对我来说更具有挑战性和吸引力,从老师那里拿到 这个题目后自己就开始了解嵌入式和 QT 方面的知识,在自己的电脑上安装了虚 拟机和 LINUX 开发环境。由于从来没有接触过前面花的时间很多,光是建立 QT 的调试环境就花了我很多时间,但是 QT 跟 C+差不多,面向对象程序设计。编 程的时候遇到的最大困难应该是图形界面的设计。QT 所独有的信号与槽机制也 是第一次接触,刚开始理解的确很吃力。但这次设计总的来说对我自己很有意义, 因为是刚接触嵌入式编程对于这次设计自己把它视做一次挑战,自己查阅资料自 己解决问题,这样的过程中给了自己很大的成就感与信心。当然这次课程设计也 锻炼了自己分析实现方面的能力。在学习理论知识的同时也能够自己动手去实现, 加深了自己对嵌入式的理解。 当然这次设计的完成除了自己的努力跟詹瑾瑜老师的指导和鼓励分不开。最 后,特别要感谢詹瑾瑜老师在这次课程设计中认真负责的教学,才使得我能结合所 学的知识完成这一课程设计。 6.2 下一步工作下一步工作 由于硬件资源有限这次设计并没有机会放入开发板中运行,下一步如果有条 件,希望可以有这样一个机会。这次的设计也有缺陷就是其实现过于简单,如果 时间充足可以为其再添加一些实用的功能,甚至可以采用绘图函数做一个模拟时 钟出来。这些都是我下一步需要思考和实现的。 6.3 附件(部分代码)附件(部分代码) #ifndef ALARM_H #define ALARM_H 电子科技大学本科课程设计报告 14 #include #include class QTimer; class QHBoxLayout; class QVBoxLayout; class QPushButton; class QLabel; class QTimeEdit; class QLCDNumber; class QVariant; class QTime; class QAction; class Alarm:public QDialog Q_OBJECT signals: void isCurrentTime(); public: Alarm(QWidget * parent=0); private slots: void clockChange();/更新时间 void dialogUp();/闹钟到了,提示框显示 void mini();/最小化到托盘 void down();/隐藏 void comToCur();/比较所时间跟标准之间 protected: void closeEvent(QCloseEvent * event); private: void init();/初始化 void layout();/布局 void con();/connect QLCDNumber * lcdNumber;/显示当前时间 QLabel * label;/提示设置下个闹钟 QTimeEdit * timeEdit;/设置小个闹钟 QPushButton * button;/确定 QTimer * timer; QTimer * uptimer; QTimer * dtimer; QTimer * itimer; QRect rect; int x; 第六章 结束语 15 int y; double du; QSystemTrayIcon * trayIcon; QAction * restoreAct; QAction * quitAct; QMenu * trayIconMenu; ; #endif #includealarm.h #include Alarm:Alarm(QWidget * parent) :QDialog(parent) init(); layout(); con(); ; / * / 初始化 / * void Alarm:init() setWindowTitle(Alarm clock); /设置标题 setFixedSize(QSize(300,80); /固定大小 timer=new QTimer; /控制 lcd 的时间刷新 uptimer=new QTimer; /控制对话框上升 dtimer=new QTimer; /控制对话框下降 itimer=new QTimer; lcdNumber=new QLCDNumber; /显示当前时间 lcdNumber-setFixedSize(QSize(150,50); /固定大小 lcdNumber-setNumDigits(8); /显示八个数字,默认是显示 5 个数字 lcdNumber-setSegmentStyle(QLCDNumber:Flat); /填充颜色,默认是 白色的 lcdNumber-display(QTime:currentTime().toString(hh:mm:ss); /设置 格式,还有其他形式的 label=new QLabel(QString:fromLocal8Bit(闹钟); /提示设置下个闹钟 timeEdit=new QTimeEdit; /设置下个闹钟 timeEdit-setDisplayFormat(hh:mm:ss); 电子科技大学本科课程设计报告 16 button=new QPushButton(QString:fromLocal8Bit(确定); trayIcon=new QSystemTrayIcon; /托盘 icon trayIcon-setIcon(QIcon(./images/qme.ico); trayIcon-show(); setWindowIcon(QIcon(./images/qme.ico); restoreAct=new QAction(QString:fromLocal8Bit(显示),this); quitAct=new QAction(QString:fromLocal8Bit(退出),this); trayIconMenu=new QMenu; trayIconMenu-addAction(restoreAct); trayIconMenu-addAction(quitAct); trayIcon-setContextMenu(trayIconMenu); setWindowFlags(Qt:WindowStaysOnTopHint); ; / * / 布局 / * void Alarm:layout() QHBoxLayout * rightTopLay=new QHBoxLayout;/ rightTopLay-addWidget(label); rightTopLay-addWidget(timeEdit); QHBoxLayout * rightButtomLay=new QHBoxLayout;/ rightButtomLay-addStretch(); rightButtomLay-addWidget(button); QVBoxLayout * rightLay=new QVBoxLayout;/ rightLay-addLayout(rightTopLay); rightLay-addLayout(rightButtomLay); rightLay-addStretch(); QHBoxLayout * main=new QHBoxLayout;/ main-addWidget(lcdNumber); main-addLayout(rightLay); setLayout(main); rect=QApplication:desktop()-rect();/ x=rect.right()-width()-2;/ y=rect.bottom()+30;/ setGeometry(x,y,width(),height();/ ; / * / connect 信号与槽 / * void Alarm:con() connect(timer,SIGNAL(timeout(),this,SLOT(clockChange(); 第六章 结束语 17 timer-start(1000); connect(uptimer,SIGNAL(timeout(),this,SLOT(dialogUp(); uptimer-start(20); connect(dtimer,SIGNAL(timeout(),this,SLOT(down(); dtimer-start(20); connect(button,SIGNAL(clicked(),dtimer,SIGNAL(timeout(); connect(button,SIGNAL(clicked(),this,SLOT(mini(); connect(itimer,SIGNAL(timeout(),this,SLOT(comToCur(); itimer-start(20); connect(restoreAct,SIGNAL(triggered(bool),uptimer,SIGNAL(timeout(); connect(this,SIGNAL(isCurrentTime(),uptimer,SIGNAL(timeout(); connect(itimer,SIGNA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论