嵌入式图形界面设计_综合实验报告

合集下载

嵌入式综合设计实习报告

嵌入式综合设计实习报告

桂林理工大学嵌入式综合设计实习报告学院:信息科学与工程班级:计算机2010-1姓名:周杰学号:3100717102指导:金红日期:2014年1月一、引言1、实习的性质、目的和意义以培养学生实际的嵌入式系统软件设计能力和创新为主要目的,通过实习,基本掌握嵌入式系统应用系统的设计方法、调试技术及创新能力等技能。

本课程是计算机专业的一门必修的专业实习课。

通过该实习,使学生进一步加深对《嵌入式系统》、《C语言程序设计》、《单片机应用系统设计》、《微机原理》、等课程相关理论知识的理解;通过该实习,使学生初步掌握嵌入式系统应用系统设计方法、系统调试等能力,提高创新技能。

2、实习的要求要求学生从嵌入式应用系统和实现的角度出发,能够利用课程内容设计嵌入式系统应用系统,掌握基本嵌入式软件设计、调试等技能,提高创新能力。

(1)掌握嵌入式系统的概念及系统构成;(2)初步掌握嵌入式系统移植及应用软件设计及调试方法;(3)初步掌握设计报告的格式要求和撰写方法。

二、课题设计1、嵌入式系统1.1嵌入式系统概述1.1.1嵌入式系统定义(1)根据IEEE(Institute of Electrical & Electronic Engineers,国际电气和电子工程师协会)的定义[1]:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”(原文为devices used to control, monitor, or assist the operation of equipment, machinery or plants)(2)通俗定义嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。

1.1.2嵌入式系统构架总体上嵌入式系统可以划分成硬件和软件两部分硬件一般由高性能的嵌入式微处理器、外围的接口电路、外设组成软件一般由:应用软件或者嵌入式操作系统和其上运行的应用软件构成;1.1.3、嵌入式系统硬件嵌入式系统硬件可分为:微处理器、外围电路和外设。

嵌入式实验报告总结

嵌入式实验报告总结

嵌入式实验报告总结嵌入式实验报告总结近年来,嵌入式系统在各个领域中得到了广泛的应用。

嵌入式系统是指将计算机系统嵌入到其他设备或系统中,以实现特定功能的一种计算机系统。

在本次嵌入式实验中,我深入学习了嵌入式系统的原理和应用,并通过实际操作,加深了对嵌入式系统的理解。

实验一:嵌入式系统的基本概念和发展历程在本实验中,我们首先了解了嵌入式系统的基本概念和发展历程。

嵌入式系统的特点是紧凑、高效、实时性强,并且适用于各种各样的应用场景。

通过学习嵌入式系统的发展历程,我们了解到嵌入式系统在不同领域的应用,如智能家居、医疗设备、汽车电子等。

这些应用领域的嵌入式系统都有着各自的特点和需求,因此在设计嵌入式系统时需要根据具体应用场景进行优化。

实验二:嵌入式系统的硬件平台与软件开发环境在本实验中,我们学习了嵌入式系统的硬件平台和软件开发环境。

硬件平台是嵌入式系统的基础,包括处理器、内存、外设等。

而软件开发环境则提供了开发嵌入式系统所需的工具和库函数。

我们通过实际操作,搭建了嵌入式系统的硬件平台,并使用软件开发环境进行程序的编写和调试。

通过这个实验,我深刻理解了硬件平台和软件开发环境对嵌入式系统的影响,以及它们之间的协同工作。

实验三:嵌入式系统的实时操作系统在本实验中,我们学习了嵌入式系统的实时操作系统。

实时操作系统是嵌入式系统中非常重要的一部分,它能够保证系统对外界事件的响应速度和可靠性。

我们通过实际操作,学习了实时任务的创建和调度,以及实时操作系统的中断处理机制。

实时操作系统的学习让我更加深入地了解了嵌入式系统的实时性要求和相关的调度算法。

实验四:嵌入式系统的通信与网络在本实验中,我们学习了嵌入式系统的通信与网络。

嵌入式系统通常需要与其他设备或系统进行通信,以实现数据的传输和共享。

我们学习了嵌入式系统的通信协议和网络协议,如UART、SPI、I2C、TCP/IP等。

通过实际操作,我掌握了这些通信和网络协议的使用方法,以及在嵌入式系统中如何进行数据的传输和处理。

嵌入式综合实验报告

嵌入式综合实验报告

ARM嵌入式系统基础综合实验报告姓名:班级:学号:指导教师:实验时间:2014年11月24日目录一、实验目的-----------------------------------3二、实验设备-----------------------------------3三、实验内容-----------------------------------3四、实验预习要求-------------------------------3五、实验原理-----------------------------------4六、实验步骤-----------------------------------9七、实验参考程序-------------------------------13八、实验心得-----------------------------------16备注:在流水灯显示的程序中,显示的字母为LIXUE,分别对应ASCII码:L--0x4C I--0x49 X--0x58 U--0x55 E--0x45 全亮--0XFF 全灭--0X00流水灯一个周期的显示流程:①流水灯全亮一次;②流水灯全灭一次,显示一个字母;③流水灯全亮一次。

根据字母显示的个数,计算出一个周期的需要的次数为12。

一、实验目的1、掌握将μC/OS-II 操作系统移植到ARM7 处理器的方法。

2、了解μC/OS-II 操作系统的基本原理和移植条件。

3、掌握LPC2200(for MagicARM2200)专用工程模板的使用;4、能够在MagicARM2200-S 上运行基于μC/OS-II 操作系统的程序;5、掌握基于μC/OS-II 操作系统的用户程序的编写格式。

二、实验设备硬件:PC机一台MagicARM2200-S 教学实验开发平台一套软件:Windows98/XP/2000 系统ADS 1.2 集成开发环境μC/OS-II 操作系统(V2.52)三、实验内容1、编写一个简单的多任务应用程序,实现LED 流水灯控制。

嵌入式实训报告报告

嵌入式实训报告报告

一、实训背景随着科技的飞速发展,嵌入式系统在各个领域得到了广泛应用。

为了提高自己的实践能力和综合素质,我参加了本次嵌入式实训。

通过实训,我对嵌入式系统有了更深入的了解,并掌握了嵌入式系统的开发流程和相关技术。

二、实训目的1. 掌握嵌入式系统的基本原理和开发流程;2. 熟悉嵌入式开发工具和环境;3. 提高动手实践能力,培养团队协作精神;4. 为以后从事嵌入式系统相关工作打下基础。

三、实训内容1. 嵌入式系统概述嵌入式系统是一种将计算机硬件和软件集成在一起的专用系统,具有实时性、高可靠性、低功耗等特点。

本次实训主要针对ARM架构的嵌入式系统进行学习。

2. 嵌入式开发环境搭建(1)硬件环境:选用STM32F103系列单片机作为开发平台。

(2)软件环境:使用Keil MDK作为集成开发环境(IDE),并安装必要的驱动程序。

3. 嵌入式系统编程(1)C语言编程:学习C语言的基本语法、数据类型、控制结构、函数等,掌握嵌入式系统编程基础。

(2)裸机编程:编写简单的裸机程序,实现单片机的GPIO、定时器、中断等功能。

(3)嵌入式操作系统:学习FreeRTOS操作系统,掌握任务创建、调度、同步等基本功能。

4. 嵌入式系统项目实践(1)设计一个基于STM32F103的单片机温度控制系统,实现温度的实时监测和控制。

(2)设计一个基于ARM Cortex-M4的智能家居系统,实现家电的远程控制和状态监测。

四、实训过程1. 理论学习:通过查阅资料、阅读教材,了解嵌入式系统的基本原理和开发流程。

2. 环境搭建:按照实训要求,配置开发环境,安装必要的驱动程序。

3. 编程实践:按照实训指导书,编写程序,实现单片机的各项功能。

4. 项目实践:根据项目要求,设计并实现嵌入式系统项目。

5. 总结与反思:对实训过程进行总结,分析自己在实训过程中遇到的问题及解决方法。

五、实训收获与体会1. 理论知识与实践相结合:通过本次实训,将所学的理论知识应用于实际项目中,提高了自己的动手实践能力。

嵌入式 图形-实验报告

嵌入式 图形-实验报告

图形用户接口一、实验目的(1)了解嵌入式系统图形界面的基本编程方法(2)学习图形库的制作二、实验原理(一)Frame Buffer显示屏的整个显示区域,在系统内会有一段存储空间与之对应。

通过改变该存储空间的内容达到改变显示信息的目的。

该存储空间被称为Frame Buffer,或显存。

显示屏上的每一点都与Frame Buffer里的某一位置对应。

所以,解决显示屏的显示问题,首先要解决的是Frame Buffer的大小以及屏上的每一像素与Frame Buffer的映射关系。

影响空间大小的因素:由于Frame Buffer空间的计算大小是以屏幕的大小和显示模式决定的,所以显示模式(单色或彩色)、显示屏的性能、显示的需要均会影响Frame Buffer空间的大小。

另外显示屏还有单屏幕、双屏幕两种工作模式:单屏幕模式代表屏幕的显示范围是整个屏幕,只需一个Frame Buffer和一个通道;双屏幕模式则将整个屏幕划分为两个部分,这两个部分各自有Frame Buffer,且他们的地址无需连续,并同时具有两个各自独立的通道将Frame Buffer的数据传送到显示屏。

显示操作及映射连续性:由于Frame Buffer通常就是从内存空间分配所得,并且他是有连续的字节空间组成,屏幕的显示操作通常是从左到右逐点像素扫描,从上到下逐行扫描,直到扫描到右下角,然后再折返到左上角。

又由于Frame Buffer里的数据是按地址递增的顺序被提取,所以屏幕上相邻的两像素被映射到Frame Buffer里是连续的,并且屏幕最左上角的像素对应Frame Buffer的第一空间单元,屏幕最右下角则对应最后一个单元空间。

(二)Frame Buffer 与色彩计算机反映自然界的颜色是通过RGB(Red-Green-Blue)值来表示的。

如果要在屏幕某点显示某种颜色,则必须给出相应的RBG值。

Frame Buffer是由所有像素的RGB值或RGB值的部分位所组成,本系统使用的16位/像素的模式下,Frame Buffer里的每个单元16位,每个单元代表一个像素的RGB值,如下图D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 R R R R R G G G G G G B B B B B有了以上的分析,就可以用下面的计算公式FrameBufferSize=Width * Height * Bitperpixel/8计算Frame Buffer的大小(以字节为单位)。

嵌入式实验报告五

嵌入式实验报告五

西北农林科技大学《嵌入式系统开发基础》实验报告五学院:机械与电子工程学院班级:电信*** 班姓名:*******学号:2011*****实验五图形界面应用程序设计一、实验目的1.了解在Linux下安装Qt以及Qt/Embedded的基本步骤;2.学会在Qt/E平台下使用Virtual framebuffer显示程序结果。

二、实验内容1.在Linnux下编译和使用Qt/E平台;2.在Qt/E平台下编译和运行一个程序使用Virtual framebuffer 显示运行结果。

三、实验步骤该在Trolltech公司的网站上可以下载该公司所提供的Qt/Embedded的免费版本,在安装产品光盘以后,本次实验目录下已有要下载的文件,在/arm2410s/gui/Qt/src下。

在做实验钱吧本次实验用到的三个文件拷贝到/root/2410sQt目录下。

[root@BC root]#cd/root/[root@BC root]#mkdir2410sQt[root@BC root]#cd/arm2410sQt/gui/Qt/src[root@BC src]#cp-arftmake-1.13.tar.gz qt-embedded-2.3.10-free.tar.gz Qt-x11-2.3.2tar.gz/root/24110sQt安装编译器arm-linux-gcc-3.4.1:[root@BC src] #cd/arm2410s/gui/Qt/tools[root@BC tools]#tar xjvfarm-linux-gcc-3.4.1.tar.bz2-C./[root@BC tools]#vi/root/.bash profile//打开文件,将该文件中的PATH变亮改为PATH=$PATH:$HOME/bin:/arm2410s/gui/Qt/tools/usr/local/arm/3.4.1/bin/,存盘后退出。

嵌入式项目综合实训报告

嵌入式项目综合实训报告

一、实训背景随着科技的飞速发展,嵌入式系统在各个领域得到了广泛的应用。

为了培养具备嵌入式系统设计、开发和应用能力的高素质人才,我国高校纷纷开设了嵌入式系统相关课程,并开展了嵌入式项目综合实训。

本文以某高校嵌入式项目综合实训为例,总结实训过程、成果及心得体会。

二、实训目标1. 掌握嵌入式系统基本原理、硬件平台及软件平台;2. 熟悉C语言编程、Linux操作系统、嵌入式系统开发工具及调试方法;3. 能够独立完成嵌入式系统设计、编程、调试及测试;4. 培养团队合作精神和创新意识。

三、实训内容1. 嵌入式系统基础知识:讲解嵌入式系统基本概念、发展历程、硬件平台、软件平台等。

2. C语言编程:学习C语言语法、数据结构、函数、指针、内存管理、文件操作等。

3. Linux操作系统:学习Linux基本命令、文件系统、进程管理、网络编程、系统调用等。

4. 嵌入式系统开发工具:熟悉Keil、IAR、GCC等集成开发环境,掌握编译、链接、调试等操作。

5. 嵌入式系统调试方法:学习使用逻辑分析仪、示波器、仿真器等调试工具,掌握调试技巧。

6. 嵌入式系统项目实践:分组完成以下项目:(1)智能家居项目:设计并实现一个基于嵌入式系统的智能家居控制系统,实现灯光、窗帘、空调等设备的远程控制。

(2)智能交通项目:设计并实现一个基于嵌入式系统的智能交通信号控制系统,实现交通信号灯的智能控制。

(3)智能农业项目:设计并实现一个基于嵌入式系统的智能农业控制系统,实现土壤湿度、光照强度等参数的实时监测。

四、实训过程1. 实训前期:学生分组,明确项目目标、任务分工,查阅相关资料,了解项目需求。

2. 实训中期:各小组按照项目进度,完成硬件选型、电路设计、软件编程、调试等工作。

3. 实训后期:各小组进行项目展示,分享项目经验,进行项目答辩。

五、实训成果1. 完成智能家居、智能交通、智能农业等嵌入式系统项目。

2. 学生动手实践,提高了嵌入式系统设计、编程、调试及测试能力。

嵌入式工作实习报告

嵌入式工作实习报告

一、实习背景随着信息化、智能化技术的飞速发展,嵌入式系统在各个领域得到了广泛应用。

为了更好地了解嵌入式技术,提高自己的实践能力,我于2023年6月至8月在某嵌入式公司进行了为期两个月的工作实习。

二、实习单位简介该公司成立于2005年,主要从事嵌入式系统研发、生产和销售,产品涵盖智能家居、工业控制、医疗设备等领域。

公司拥有一支高素质的研发团队,具备丰富的项目经验和技术实力。

三、实习内容1. 项目背景及需求分析在实习期间,我参与了公司一款智能家居产品的研发项目。

该项目旨在为用户提供便捷、舒适的家居生活体验,主要功能包括远程控制家电、智能安防、环境监测等。

2. 硬件选型及搭建在项目初期,我负责对硬件进行选型及搭建。

根据项目需求,我选择了STM32F103系列单片机作为核心控制器,同时配置了传感器、通信模块、显示屏等外围设备。

在硬件搭建过程中,我学会了如何使用电子元器件、电路板焊接等技能。

3. 软件开发及调试在硬件搭建完成后,我开始进行软件开发及调试。

主要工作包括:(1)嵌入式C语言编程:使用Keil uVision作为开发环境,编写嵌入式C语言程序,实现产品功能。

(2)驱动开发:针对传感器、通信模块等外围设备,编写相应的驱动程序。

(3)系统调试:在开发过程中,不断调试程序,确保系统稳定运行。

4. 项目测试及优化在软件开发完成后,我参与了对产品的测试及优化。

主要工作包括:(1)功能测试:对产品各项功能进行测试,确保满足用户需求。

(2)性能测试:测试产品在高速、高温等恶劣环境下的性能表现。

(3)优化:针对测试过程中发现的问题,对程序进行优化,提高产品稳定性。

四、实习收获1. 技术能力提升通过本次实习,我熟练掌握了嵌入式C语言编程、硬件选型及搭建、驱动开发等技能,提高了自己的实践能力。

2. 团队协作与沟通在项目过程中,我与团队成员密切合作,共同解决问题。

这使我学会了如何与他人沟通、协作,提高了自己的团队协作能力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式图形界面设计报告班级:计算机科学与技术15-2班小组成员:刘航征、安宝、曲晗羽杨祎涵、张振、李雪辰2017年12月一、前言天气预报(测)或气象预报(测)是使用现代科学技术对未来某一地点地球大气层的状态进行预测。

从史前人类就已经开始对天气进行预测来相应地安排其工作与生活(比如农业生产、军事行动等等)。

今天的天气预报主要是使用收集大量的数据(气温、湿度、风向和风速、气压等等),然后使用目前对大气过程的认识(气象学)来确定未来空气变化。

由于大气过程的混乱以及今天科学并没有最终透彻地了解大气过程,因此天气预报总是有一定误差的。

最传统的数据是在地面或海面上通过专业人员、爱好者、自动气象站或者浮标收集的气压、气温、风速、风向、湿度等数据。

世界气象组织协调这些数据采集的时间,并制定标准。

这些测量分每小时一次(METAR)或者每六小时一次(SYNOP)。

该项目为一款天气预报软件,基于Qt5开发,具有查询指定城市天气、显示当天天气状况以及未来四天天气大致状况的主要功能,次要功能为更换软件皮肤,显示当天感冒指数等功能。

软件预览图:二、选用的技术基本说明1、Qt JSON操作QJsonDocumentQJsonDocument 类用于读和写JSON 文档。

一个JSON 文档可以使用QJsonDocument::fromJson() 从基于文本的表示转化为QJsonDocument,toJson() 则可以反向转化为文本。

解析器非常快且高效,并将JSON 转换为Qt 使用的二进制表示。

已解析文档的有效性,可以使用!isNull() 进行查询。

如果要查询一个JSON 文档是否包含一个数组或一个对象,使用isArray() 和isObject()。

包含在文档中的数组或对象可以使用array() 或object() 检索,然后读取或操作。

也可以使用fromBinaryData() 或fromRawData() 从存储的二进制表示创建来JSON 文档。

QJsonArrayQJsonArray 类封装了一个JSON 数组。

JSON 数组是值的列表。

列表可以被操作,通过从数组中插入和删除QJsonValue 。

一个QJsonArray 可以和一个QVariantList 相互转换。

可以使用size() 来查询条目的数量,通过insert() 在指定索引处插入值,removeAt() 来删除指定索引的值。

QJsonObjectQJsonObject 类封装了一个JSON 对象。

一个JSON 对象是一个“key/value 对”列表,key 是独一无二的字符串,value 由一个QJsonValue 表示。

一个QJsonObject 可以和一个QVariantMap 相互转换。

可以使用size() 来查询“key/value 对”的数量,通过insert() 插入“key/value 对”,remove() 删除指定的key。

QJsonValueQJsonValue 类封装了一个值。

JSON 中的值有6 种基本数据类型:∙bool(QJsonValue::Bool)∙double(QJsonValue::Double)∙string(QJsonValue::String)∙array(QJsonValue::Array)∙object(QJsonValue::Object)∙null(QJsonValue::Null)一个值可以由任何上述数据类型表示。

此外,QJsonValue 有一个特殊的标记来表示未定义的值,可以使用isUndefined() 查询。

值的类型可以通过type() 或isBool()、isString() 等访问函数查询。

同样地,值可以通过toBool()、toString() 等函数转化成相应的存储类型。

QJsonParseErrorQJsonParseError 类用于在JSON 解析中报告错误。

枚举QJsonParseError::ParseError:该枚举描述JSON 文档在解析过程中所发生的错误类型。

2、Qt XML 操作QXmlStreamReader用于读取格式良好的XML文档的快速解析器,该类最快且最易于使用,并提供了与其他Qt兼容的应用程序编程接口,很适用于编写单通道解析器;3、QNetworkAccessManagerQNetworkAccessManager类允许应用程序发送网络请求和接收网络应答。

三、方案设计1、初始化UI界面2、获取当前地区时间3、从文件中读取每个城市名称以及其代码,将其组合分别存入QMap类对象citykeys中4、用预设的url发送http请求,获取本地城市名称5,、用获取的本地城市名称获取citykeys中对应的城市代码发出查询未来五天天气的http请求6、收到的回复为JSON文档,用QJsonDocument类解析JSON文档,将得到的未来五天的天气信息分别存入Forecast结构体数组forecast的每一个元素中,将这些信息显示在主窗口中对应的控件上,然后发出查询今天天气的http请求7、收到的回复为XML格式文档,用QXmlStreamReader类读取其信息,将当天的天气信息存入Today 结构体today中,将这些信息显示在主窗口中对应的控件上。

8、设置搜索按钮以及换肤按钮的信号与槽的关联。

流程图四、详细代码解析ui设计界面:mainwindow.h:#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include<QNetworkAccessManager> #include<QNetworkReply>#include<QNetworkRequest>#include<QPixmap>#include<QPaintEvent>#include<QPainter>#include<QPoint>#include<QMouseEvent>#include<QLabel>namespace Ui {class MainWindow;}struct Forecast{QString fengxiang;QString fengli;QString high;QString type;QString low;QString date;};struct Today{QString ganmao;QString city;QString updatetime;QString wendu;QString fengli;QString fengxiang;QString sunrise;QString sunset;QString shidu;};class MainWindow : public QMainWindow{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0); ~MainWindow();protected:void paintEvent(QPaintEvent *);void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event);void mouseReleaseEvent(QMouseEvent *); protected slots:void replayFinished(QNetworkReply *reply);private slots:void on_getButton_clicked();void on_updateButton_clicked();private:Ui::MainWindow *ui;QNetworkAccessManager *manager;QString URL_1;QString URL_2;Forecast forecast[5];Today today;void parseJson(QString Json);void parseXml(QString Xml);void parseCity(QString City);void loadCitykeys();//加载城市代码文件QMap<QString,QString> citykeys;//存储城市代码int choose;//0.查询IP 1.今天天气+指数2.未来5天天气QPixmap pixmap;QPoint move_point;bool mouse_press;QList<QLabel *> forecast_date_list;QList<QLabel *> forecast_temp_list;QList<QLabel *> forecast_type_list;QString city;int uid;};#endif //MAINWINDOW_Hmainwindow.cpp:#include "mainwindow.h"#include "ui_mainwindow.h"#include<QVariant>#include<QByteArray>#include<QJsonParseError>#include<QJsonArray>#include<QJsonObject>#include<QJsonDocument>#include<QJsonValue>#include<QXmlStreamReader>#include<QMessageBox>//#include<QDebug>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ui->setupUi(this);setWindowFlags(Qt::FramelessWindowHint);setAttribute(Qt::WA_TranslucentBackground);pixmap.load(":/images/UI0");resize(pixmap.size());uid = 0;mouse_press = false;forecast_date_list<<ui->forecast_0_date<<ui->forecast_1_date<<ui->forecast_2_date<<ui->forecast_3_date<<ui->forecast_4_date;forecast_temp_list<<ui->forecast_0_temp<<ui->forecast_1_temp<<ui->forecast_2_temp<<ui->forecast_3_temp<<ui->forecast_4_temp;forecast_type_list<<ui->forecast_0_type<<ui->forecast_1_type<<ui->forecast_2_type<<ui->forecast_3_type<<ui->forecast_4_type;manager = new QNetworkAccessManager(this);//天气APIURL_1 = "/weather_mini?citykey=";URL_2 = "/WeatherApi?citykey=";connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replayFinished(QN etworkReply*)));//设置组件样式ui->cityEdit->setTextMargins(0, 0, ui->getButton->width(), 0);ui->cityEdit->setStyleSheet("QLineEdit{border: 1px solid gray;border-radius: 3px;background:rgb(200, 231, 232);}QLineEdit:hover{border-color:transparent; }");ui->getButton ->setStyleSheet("background:transparent;");ui->closeButton->setStyleSheet("QPushButton{border-image:url(:/images/close);}QPushButton:hover{border-image:url(:/images/close_on);}QPushButton:hover:pressed{border-image:url(:/images/close);}");ui->minButton->setStyleSheet("QPushButton{border-image:url(:/images/min);}QPushButton:hover{border-image:url(:/images/min_on);}QPushButton:hover:pressed{border-image:url(:/images/min);}");ui->updateButton->setStyleSheet("QPushButton{border-image:url(:/images/update);}QPushButton:hover{border-image:url(:/ima ges/update_on);}QPushButton:hover:pressed{border-image:url(:/images/update); }");QDateTime time = QDateTime::currentDateTime();ui->date->setText(tr("%1").arg(time.toString("yyyy-MM-dd")));//加载城市代码loadCitykeys();//启动程序后先查询ip定位默认城市choose = 0;manager->get(QNetworkRequest(QUrl("/iplookup/ipl ookup.php")));}MainWindow::~MainWindow(){delete ui;}void MainWindow::paintEvent(QPaintEvent *){QPainter painter(this);painter.drawPixmap(0, 0, pixmap);//绘制UI}void MainWindow::mousePressEvent(QMouseEvent *event){if(event->button() == Qt::LeftButton){//鼠标相对于窗体的位置)move_point = event->pos();mouse_press = true;}}void MainWindow::mouseMoveEvent(QMouseEvent *event){if(mouse_press){//鼠标相对于屏幕的位置QPoint move_pos = event->globalPos();//移动主窗体this->move(move_pos - move_point);}}void MainWindow::mouseReleaseEvent(QMouseEvent *){mouse_press = false;}void MainWindow::loadCitykeys() {QFile file(":/citykeys/citykeys");if ( !file.open(QIODevice::ReadOnly | QIODevice::Text) ) return ;QString tmp;while (file.atEnd() == 0) {tmp = file.readAll();}QStringList list = tmp.split(",");for(int i = 0; i < list.length(); i++) {QString s = list.at(i);QString citys = s.split(":").at(1);QString city = citys.replace("\"", "");QString codes = s.split(":").at(0);QString code = codes.replace("\"", "");citykeys.insert(city, code);}}void MainWindow::replayFinished(QNetworkReply *reply){QVariant status_code =reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);if(reply->error() == QNetworkReply::NoError){QByteArray bytes = reply->readAll();if(choose == 0)//查询IP{QString result = QString::fromLocal8Bit(bytes);parseCity(result);}else if(choose == 1)//今天天气+指数{QString result(bytes);parseXml(result);}else if(choose == 2)//未来5天天气{QString result(bytes);parseJson(result);}}elseQMessageBox::information(this,tr("出错啦"),tr("网络错误,请检查网络连接"),QMessageBox::Ok,QMessageBox::Ok);}//解析城市信息void MainWindow::parseCity(QString City){city = City.split(tr(" ")).at(5);if(city == "" || citykeys[city]==""){QMessageBox::information(this,tr("提示"),tr("无法定位城市,请手动查询"),QMessageBox::Ok,QMessageBox::Ok);return;}QString url = URL_1 + citykeys[city];choose = 2;manager->get(QNetworkRequest(QUrl(url)));}//解析json格式的未来天气void MainWindow::parseJson(QString Json){QByteArray byte_array;QJsonParseError json_error;QJsonDocument parse_doucment =QJsonDocument::fromJson(byte_array.append(Json),&json_error);if(json_error.error == QJsonParseError::NoError){QJsonObject obj = parse_doucment.object();QJsonValue desc = obj.take("desc");if(desc.toString() != "OK"){QMessageBox::information(this,tr("抱歉"),tr("暂无此城市的天气情况"),QMessageBox::Ok,QMessageBox::Ok);return;}QJsonValue data = obj.take("data");today.ganmao = data.toObject().take("ganmao").toString();QJsonValue forecast1 = data.toObject().take("forecast");QJsonArray forecast2 = forecast1.toArray();for(int i=0; i<5; i++){QJsonValue value = forecast2.at(i);QJsonObject object = value.toObject();forecast[i].fengxiang = object.take("fengxiang").toString();forecast[i].date = object.take("date").toString();forecast[i].fengli = object.take("fengli").toString();forecast[i].high = object.take("high").toString();forecast[i].low = object.take("low").toString();forecast[i].type = object.take("type").toString();}for(int i=0;i<5;i++){forecast_date_list[i]->setText(tr("%1").arg(forecast[i].date));forecast_temp_list[i]->setText(tr("%1- %2").arg(forecast[i].low.split(" ").at(1)).arg(forecast[i].high.split(" ").at(1)));forecast_type_list[i]->setPixmap(QPixmap(tr(":/images/%1").arg(forecast[i].t ype)));forecast_type_list[i]->setToolTip(tr("%1 : %2- %3").arg(forecast[i].type).arg(forecast[i].fengli).arg(forecast[i].fengxia ng));}ui->forecast_0_date->setText(tr("今天"));QString url = URL_2 + citykeys[city];choose = 1;manager->get(QNetworkRequest(QUrl(url)));}else{QMessageBox::information(this,tr("出错啦"),tr("数据出错,请重试"),QMessageBox::Ok,QMessageBox::Ok);return;}}//解析XML格式的今天天气void MainWindow::parseXml(QString Xml){QXmlStreamReader xml(Xml);while(!xml.atEnd()){if(xml.hasError()){QMessageBox::information(this,tr("出错啦"),tr("数据出错,请重试"),QMessageBox::Ok,QMessageBox::Ok);return;}else if(xml.isStartElement()){if(()=="city"){today.city = xml.readElementText();}else if(()=="updatetime"){today.updatetime = xml.readElementText();}else if(()=="wendu"){today.wendu = xml.readElementText();}else if(()=="fengli"){today.fengli = xml.readElementText();}else if(()=="shidu"){today.shidu = xml.readElementText();}else if(()=="fengxiang"){today.fengxiang = xml.readElementText();}else if(()=="sunrise_1"){today.sunrise = xml.readElementText();}else if(()=="sunset_1"){today.sunset = xml.readElementText();xml.clear();ui->city->setText(tr("%1").arg(today.city));ui->temp->setText(tr("%1℃").arg(today.wendu));ui->sunrise->setText(tr("%1").arg(today.sunrise));ui->sunset->setText(tr("%1").arg(today.sunset));ui->label->setText(tr("日出"));ui->label_2->setText(tr("日落"));ui->label_3->setText(tr("湿度"));ui->shidu->setText(tr("%1").arg(today.shidu));ui->fengli->setText(tr("%1").arg(today.fengli));ui->fengxiang->setText(tr("%1").arg(today.fengxiang)); ui->label_4->setText(tr("感\n冒\n指\n数"));ui->ganmao->setText(tr("%1").arg(today.ganmao));return;}elsexml.readNext();}elsexml.readNext();}xml.clear();}//搜索框查询天气void MainWindow::on_getButton_clicked(){if(ui->cityEdit->text().isEmpty())return;city = ui->cityEdit->text();if(citykeys[city] == "") {QMessageBox::information(this,tr("抱歉"),tr("暂无此城市的天气情况"),QMessageBox::Ok,QMessageBox::Ok);return;}QString url = URL_1 + citykeys[city];choose = 2;manager->get(QNetworkRequest(QUrl(url)));}//简单换肤void MainWindow::on_updateButton_clicked(){//选择UI的idif(uid == 3)uid = 0;elseuid = uid + 1;//拼凑成UI路径QString UIpath = tr(":/images/UI%1").arg(uid);//qDebug()<<UIpath;//加载UIpixmap.load(UIpath);//产生paintEvent重绘UIupdate();}main.cpp:#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]){QApplication a(argc, argv);MainWindow w;w.show();return a.exec();}五、测试数据及分析打开程序:换肤:搜索指定城市天气信息:六、结论:本次我们小组对设计实验所涉及到知识进行讨论,共同研究,查证资料,掌握将要用到的Qt知识并且对我们小组的实验进行主要设计,对小组实验进行分工,本次设计实验结束后我们脑海里已经对QT的知识面得到了延伸!七、参考文献/liang19890820/article/details/52767153 [Qt之JSON生成与解析] /styyzxjq2009/article/details/8041287[Qt XML读取写入操作]/chenlong12580/article/details/7391622 [Qt网络编程之QNetworkAccessManager]。

相关文档
最新文档