物联网实战--入门篇之(九)安卓QT--开发框架

目录

一、QT简介

二、开发环境

三、编码风格

四、设计框架

五、总结


一、QT简介

        QT是一款以C++为基础的开发工具,已经包含了很多常用的库,除了基本的GUI以外,还有网络、数据库、多媒体、进程通信、串口、蓝牙等常用库,开发起来非常方便。后来QT又引入了QML,使得在制作界面方面更便捷了,类似js的语言,上手容易,短短几行代码就可以设计出灵活且美观的界面,开发成本极低。

        选择QT作为用户端的开发工具主要有以下优点:

1、学习成本较低,相比于再学习Java和安卓开发,确实是低的;而且既然会C语言了,由于QT各种库已经封装得非常好了,你只要学会如何调用就行了,上手很快,不要被C++吓到。

2、具备前后端开发的框架,相信QT引入QML也是为了可以区分前后端开发,相比于传统的QtWidgets纯C++开发,结构框架上会好很多,而且QtWidgets也不适合手机端的开发。

3、通用性强,就这个项目的QT程序,可以在Windows、MacOS、安卓、IOS、嵌入式linux(树莓派、香橙派)等平台编译运行,作为个人的学习开发工具,效率很高。

4、使用广泛,QT在消费级产品比较少应用,但是在工业领域却是很广泛的存在,比如汽车的很多仪表盘的界面都是用QT做的,会QT对以后找工作是有比较大的帮助的。

        总的来讲,QT综合功能强,很适合个人开发一些小项目、上位机等,可以让你的学习精力放在项目本身,见效快。

二、开发环境

        QT的开发方式是比较丰富的,很多人一开始都是从拖拽界面开始的,但是我不太建议这样,表面上效率很高,但是稍微有点逻辑、动态变化的元素在里面就很不好处理,比较适合做些固定的小界面。要我说,还是要学会用代码的方式去控制界面。

        正常QT安装完后就可以直接用自带的MinGW编译套件进行开发,可以随机打开一个自带的Demo进行测试。对于我们项目本身,框架结构上还是要有利于维护的,所以各类文件存放的位置最好统一下,如下图所示,整个工程结构主要分为项目文件xxx.pro、头文件、cpp文件和资源文件四大部分,在资源管理器内的文件夹也做相应的分类,这样整个项目维护起来比较方便。

三、编码风格

        每个开发语言或者开发工具都有自己的编码风格,比如之前说的RT-Thread用的是Unix风格,小写字母+下划线。相对来讲,Qt的风格比较丰富,大部分是下图这种形式的,前面是小写的动词,后面使用驼峰法把属性隔开,比较少用下划线;如果没有动词的话,前面也是小写开头的。大家打开QT的Demo或者源文件什么的,在默认参数下,整体感觉还是很协调优雅的,说明他们在编辑器排版、颜色、编码等内容都是做过功课的,那我们也基本上入乡随俗,沿用Qt的编码风格,当然了,也不一定非得生搬硬套,整体上差不多就行。

        我个人的定义一般是这样,如下图所示,类的成员变量一般都会以m_开头,信号定义分为两种,一种是C++内部的,用sig开头,一种是C++发到QML的,用siq开头;对于槽函数,统一都是slot开头,这样在写代码的时候很容易就通过补全提示体现筛选出来了。同样的,在这里我也大量使用了u8、u16和u32,对于嵌入式而言,这个比较严谨和适用,还有就是个人习惯,所以也就沿用了。

        刚才所提到的信号和槽是QT的一个特点,它可以很方便地实现不同任务之间的数据交互,以前有写过linux的代码,是用的管道通信,后来使用QT的信号槽后感觉方便多了。

四、设计框架

        既然是模仿小米的空气净化器,那首先就要看下米家APP关于净化器的界面设计了。

        首先界面分为关机和开机两个状态,上面的是关机,数据显示的内容和位置其实是没变化的,底面背景变了而已;我们只是模仿而已,像自动、睡眠这些个模式就不要了,能调速就行了,页面搞太长了也不利于初学,那其实就剩下开关和调速栏了;这里面其实还有个比较麻烦的是开机后中心圆圈(图片中橘黄色部分)是渐变色,并且还有气泡随机冒出向中心运动,这个要花点脑筋想想怎么实现,不需要美工的。

        经过整体分析,大概可以做如下分解,前后端先分开,后端主要是数据处理的问题,没有过多的逻辑;前端几个界面上面也说明过了,就是一个动态界面比较麻烦点,还有个状态切换也要说明下,就是根据不同的PM2.5数值换算成不同的等级,这里分为优、良、差三级,对应的颜色是绿、黄、红,这个在第一篇的演示视频里应该都看到了,这里再大概贴个界面,顶部改成了在线状态(小绿灯)和ID号,便于跟自己的内容结合。

五、总结

        那么,手机端APP的整体设计也就这样了,不复杂,这里都没有用美工进行UI设计的,几个QML文件就能搞定了,核心还是背后要有自己的设计思路,我出这个教程的目的除了方便大家入门以外,还有个目的就是让大家一开始就有项目思维,不要停留在跑个demo的层面。

        另外,如果暂时Qt for Android的环境配置有问题,那就先放放也无妨,直接在PC端体验就好了,效果差不多的,有时间再慢慢折腾。

  本项目的交流QQ群:701889554

   写于2024-4-2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/797049.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

好看流光风格个人主页HTML源码

这是一款好看流光风格个人主页HTML源码,感觉挺喜欢的,需要的自行下载! 源码下载 好看流光风格个人主页源码

SpringBoot3整合RabbitMQ之三_工作队列模型案例

SpringBoot3整合RabbitMQ之三_工作队列模型案例 文章目录 SpringBoot3整合RabbitMQ之三_工作队列模型案例2. 工作队列模型1. 消息发布者1. 创建工作队列的配置类2. 发布消费Controller 2. 消息消费者One3. 消息消费者Two4. 消息消费者Three5. 输出结果 2. 工作队列模型 1. 消息…

SGD随机梯度下降

一、补充概念: 目标函数(Objective Function):这个术语通常指的是整个优化问题中需要最小化(或最大化)的函数。在机器学习和优化中,目标函数可以包括损失函数以及正则化项等。目标函数的最优化过…

怎么转换图片格式jpg?分享几种转换的方法

我们都知道现在图片格式种类非常多,比较常用的有jpg、png、webp等,很多时候,我们在网上保存的照片不是jpg格式的,查看或者编辑起来就很麻烦,这时候你可能需要将图片转换成jpg格式,那怎么转换图片格式jpg呢?…

【CNN】ConvMixer探究ViT的Patch Embedding: Patches Are All You Need?

Patches Are All You Need? 探究Patch Embedding在ViT上的作用,CNN是否可用该操作提升性能? 论文链接:https://openreview.net/pdf?idTVHS5Y4dNvM 代码链接:https://github.com/tmp-iclr/convmixer 1、摘要 ViT的性能是由于T…

我的 256天 创作纪念日

创作纪念日 我与CSDN的初识耕耘后的收获有笑有泪的日常小小的成就我的憧憬 我与CSDN的初识 在大一上学期的C语言课程中,我首次接触到CSDN。那时,面对众多难以理解的题目,我不得不频繁搜索相关知识和题解,CSDN成了我的救星。这个经…

这几个小众SaaS知识库工具原来这么好用,强烈推荐!

时代的进步和科技的发展,让我们有了更多高效的工作工具。由于云计算和SaaS(Software as a Service)的普及,越来越多的知识库工具被广大用户所知和使用。今天,就让我来为你推荐几款小众但卓效独特的SaaS知识库工具。 首…

市场首款!华邦电子发布内置PQC算法的闪存产品

3月27日,全球领先的半导体内存解决方案供应商华邦电子股份有限公司推出TrustME Secure Flash W77Q系列的最新扩展,包括256Mb、512Mb和1Gb器件。 这些突破性的安全闪存设备是市场上首款针对后量子密码学(PQC)实施Leighton-Micali签…

FSP7罗德与施瓦茨FSP7频谱分析仪

181/2461/8938产品概述: 罗德与施瓦茨 FSP7 频谱分析仪以其创新的测量和大量标准功能而著称。FSP7 没有提供多种选项,而是标配了最先进的频谱分析仪所需的所有功能和接口。FSP 具有如此丰富的功能,以极具吸引力的性价比提供最先进的频谱分析…

windows下Msys2编译OpenOCD方法与总结

windows下Msys2编译OpenOCD方法与总结 参考博客: 编译的总体方法:https://blog.csdn.net/MicroMehhh/article/details/135721360lib-usb库问题的解决办法:https://github.com/espressif/openocd-esp32/issues/162编译方法参考: …

智过网:一建继续教育,操作指南与周期解析

随着社会的快速发展和技术的不断更新,建筑行业对从业人员的专业素质要求也在逐步提高。为了确保一级建造师的专业技能能够与时俱进,满足行业发展的需求,继续教育成为了必不可少的环节。本文将详细解析一建继续教育的操作流程及其周期安排&…

前端开发学习笔记 3 (Chrome浏览器调试工具、Emmet语法、CSS复合选择器、CSS元素选择模式、CSS背景)

文章目录 Chrome浏览器调试工具Emmet语法CSS复合选择器后代选择器子选择器并集选择器伪类选择器 CSS元素选择模式元素选择模式概述CSS块标签CSS行内标签CSS行内块标签CSS元素显示模式转换 CSS背景CSS背景颜色CSS背景图片CSS背景图片平铺CSS背景图片位置CSS背景图片固定CSS背景复…

解锁网络安全新境界:雷池WAF社区版让网站防护变得轻而易举!

网站运营者的救星:雷池WAF社区版 ️ 嘿朋友们!今天我超级激动要跟你们分享一个神器——雷池WAF社区版。这个宝贝对我们这帮网站运营者来说,简直就是保护伞! 智能语义分析技术:超级侦探上线 先说说为啥我这么稀饭它。雷…

10倍提效!用ChatGPT编写系统功能文档。。。

系统功能文档是一种描述软件系统功能和操作方式的文档。它让开发团队、测试人员、项目管理者、客户和最终用户对系统行为有清晰、全面的了解。 通过ChatGPT,我们能让编写系统功能文档的效率提升10倍以上。 ​《Leetcode算法刷题宝典》一位阿里P8大佬总结的刷题笔记…

TCP挥手中TIME_WAIT存在的原因

四次挥手的一般过程如图所示: 在客户端收到FIN结束报文的时候不是立刻进入CLOSED状态,而是进入TIME_WAIT状态,一般等2MLS后进入关闭状态。 原因: 1.可靠地终止 TCP 连接。 2.保证让迟来的 TCP报文段有足够的时间被识别并丢弃。 …

长文本大模型火爆国内AI市场,算力需求激增引领行业变革

近期,一款名为Kimi的大模型火爆国内AI市场,以其出色的长文本处理能力和广泛的应用前景吸引了众多关注。随着Kimi等长文本大模型的流行,算力需求持续增长,为AI行业带来了新的变革和机遇。 Kimi突破长文本处理极限,为复杂…

Leetcode-Hot 100题目分类

哈希 &#xff08;以空间换时间&#xff09; 1 两数之和 原始的暴力破解的方法&#xff1a; class Solution {public int[] twoSum(int[] nums, int target) {/** 暴力破解的方法 */int[] result new int[2];int length nums.length;for(int i 0;i<length;i){for(int j…

win10鼠标无限转圈圈是什么原因,win10系统鼠标无限转圈圈

win10鼠标无限转圈圈是什么原因?一般后台有程序在运行,鼠标出现圆圈转动则代表正在加载中,等待一会就好了。若如果转了好久的圈圈,程序没有响应,点击桌面也没有反应,则尝试打开任务管理器,将未响应或异常的程序强制结束掉。其实,出现这种情况,有可能是win10系统中的一…

【氮化镓】GaN SP-HEMT的栅极可靠性

概括总结&#xff1a; 本文研究了氮化镓&#xff08;GaN&#xff09;肖特基型p-栅高电子迁移率晶体管&#xff08;GaN SP-HEMT&#xff09;的栅极鲁棒性和可靠性&#xff0c;通过一种新的电路方法评估了在实际转换器中栅极电压&#xff08;VGS&#xff09;过冲波形的栅极电压应…

第四百四十二回 再谈flutter_launcher_icons包

文章目录 1. 概念介绍2. 使用方法3. 示例代码4. 经验与总结4.1 经验分享4.2 内容总结 我们在上一章回中介绍了"overlay_tooltip简介"相关的内容&#xff0c;本章回中将 再谈flutter_launcher_icons包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 …