当前位置: 首页 > news >正文

物联网实战--入门篇之(九)安卓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

相关文章:

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

目录 一、QT简介 二、开发环境 三、编码风格 四、设计框架 五、总结 一、QT简介 QT是一款以C为基础的开发工具,已经包含了很多常用的库,除了基本的GUI以外,还有网络、数据库、多媒体、进程通信、串口、蓝牙等常用库,开发起来…...

【leetcode面试经典150题】16.接雨水(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致&…...

互联网面经

腾讯视频 代码:反转链表,单例模式 RAII,哪里用到 Web服务器怎样处理请求 get\post流程 项目使用的还是http1.0吗;http2.0:二进制、首部压缩、主动推送;Https Epoll/select/poll ET/LT 进程地址空间。3…...

xss介绍及作用

XSS(Cross-Site Scripting)是一种常见的网络安全漏洞,它允许攻击者向网站注入恶意的客户端脚本代码,从而在用户的浏览器中执行这些代码。 XSS攻击的原理是攻击者将恶意脚本插入到网页中的用户输入数据中,当其他用户访…...

PostgreSQL入门到实战-第二弹

PostgreSQL入门到实战 PostgreSQL安装之Windows官网地址PostgreSQL概述Windows上安装PostgreSQL更新计划 PostgreSQL安装之Windows 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://www.postgresql.org/PostgreSQL概…...

3-【PS让图片动起来】系列1-【导入素材】

【问题介绍】仅做图片,现在很难吸引用户视线,越来越多地图片需要动起来增添意境,比如春日樱花花瓣掉落、冬季雪花纷纷,今天来学学怎么用PS的时间轴,让图片动起来~ 如下图,一副冬日雪景图,想给画…...

基于Java+SpringBoot+Mybaties+layui+Vue+elememt 实习管理系统 的设计与实现

一.项目介绍 前台功能:用户进入系统可以实现首页,系统公告,个人中心,后台管理等功能进行操作 后台由管理员,实习单位,教师和学生,主要功能包括首页,个人中心,班级管理&am…...

非关系型数据库——Redis基本操作

目录 一、Redis数据库常用命令 1.Set——存放数据 2.Get——获取数据 3.Keys——获取符合条件的键值 4.Exists——判断键值是否存在 5.Del——删除指定键值 6.Type——获取键值对应的类型 7.Rename——对已有键值重命名(覆盖) 8.Renamenx——对…...

golang语言和JAVA对比

引言: 在当今的软件开发领域,有许多编程语言供开发人员选择。其中,Golang和Java是两种备受开发者青睐的语言。本文将探讨Golang和Java之间的比较和对比,分析它们在语言特性、性能、平台支持、社区和生态系统、开发效率和可维护性等方面的异同。 一、语言特性和性能 Golang…...

隐私计算实训营学习九:隐语多方安全计算在安全核对的行业实践

文章目录 一、业务背景:安全核对产生的土壤二、产品方案:从试点到规模化的路三、技术共建:与隐语的共同成长 一、业务背景:安全核对产生的土壤 业务背景:很多粗放使用数据的方式被新出台的法律法规所规范,…...

C#实现只保存2天的日志文件

文章目录 业务需求代码运行效果 欢迎讨论! 业务需求 在生产环境中,控制台窗口不便展示出来。 为了在生产环境中,完整记录控制台应用的输出,选择将其输出到文件中。 但是,存储所有输出的话会占用很多空间,…...

C++ 类和对象(中篇)

类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情 况下,都会自动生成下面6个默认成员函数。 构造函数: 定义:构造函数是一个特殊的成员…...

可视化场景(9):智慧看板,可能是最直观的数据展示

10年经验的大数据可视化和数字孪生老司机,该领域的专家,是您可信赖的技术合伙人,分享该领域的项目和作品,欢迎互动交流。 hello,我是贝格前端工场,本期分享可视化大屏在安全生产与设备运维场景的应用&#…...

加密算法(二)

1、SHA-256加密算法: package com.arithmetic.encryption; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; //使用java.security.MessageDigest类来进行SHA-256摘要的计算。 //通过getInstance("SHA-256")方法获取…...

大创项目推荐 深度学习 YOLO 实现车牌识别算法

文章目录 0 前言1 课题介绍2 算法简介2.1网络架构 3 数据准备4 模型训练5 实现效果5.1 图片识别效果5.2视频识别效果 6 部分关键代码7 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于yolov5的深度学习车牌识别系统实现 该项目较…...

IP知识详解

IP基本认识 IP 在 TCP/IP 参考模型中处于第三层,也就是网络层。 网络层的主要作用是:实现主机与主机之间的通信,也叫点对点(end to end)通信。 网络层与数据链路层有什么关系呢? IP 的作用是主机之间通信…...

设计模式:适配器模式

定义 适配器模式(Adapter Pattern),也称为包装器(Wrapper)模式,是一种结构型设计模式,它允许不兼容的接口之间进行交互。适配器模式通过包装一个已有的类,提供一个与原系统兼容的接…...

大语言模型落地的关键技术:RAG

1、什么是RAG? RAG 是检索增强生成(Retrieval-Augmented Generation)的简称,是当前最火热的大语言模型应用落地的关键技术,主要用于提高语言模型的效果和准确性。它结合了两种主要的NLP方法:检索&#xff…...

ffmpeg Android 笔记

目录 没有示例项目 编译好的.a文件 ffmpegandroid 延时有220ms rk官方有例子 ffmpeg Android 笔记 没有示例项目 编译好的.a文件 FFmpeg-Android/ffmpeg-android-aarch64-34/lib at main yhbsh/FFmpeg-Android GitHub ffmpegandroid 看到了音频解码器 FFmpegAndroid/a…...

本地创建新分支并提交gitee

初始化本地仓库 git init链接远程仓库 git remote add origin https://gitee.com/xxxxxxxxxxx提交本地代码(进行commit提交) git add . git commit -m "分支名"创建分支 git branch 分支名选择刚刚创建的分支 git checkout 分支名查看所选中的分支 git branch …...

vscode里如何用git

打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

day52 ResNet18 CBAM

在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...