014-第二代软件开发

头图

第二代软件开发

文章目录

  • 第二代软件开发
    • 项目介绍
    • 正式开始我们的Debian Qt 软件开发
      • 主题色
        • QSS
      • U盘检测
        • QFileSystemWatcher
      • 屏幕键盘
      • LibUSB 使用
    • 总结

关键字: QtQmlU盘检测屏幕键盘LibUSB

项目介绍

欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。

在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。

在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资源消耗,以确保我们的项目在各种平台和设备上都能够高效运行。

无论您是对 QML 和 C++ 开发感兴趣,还是需要我们为您构建复杂的用户界面和后端逻辑,我们都随时准备为您提供支持。请随时联系我们,让我们一同打造现代化、高性能的 QML & C++ 项目!

重要说明☝

☀该专栏更新到第三代软件开发时将转为收费专栏

正式开始我们的Debian Qt 软件开发

第二代基本目的就是将我们的第一代软件移植到Arm Linux 下,就算是完成了,没有太多的新的功能放进来,以稳为主。所以知识点没有太多更新,这里流水账过一下。

主题色

这里我用的方式不能说是错误的,但是绝对不是正确的,其实如果开始有考虑后期更换UI颜色等操作的话,可以考试qss文件,这也一个qss文件就等于是一个主题了,但是呢,我还是写在的代码里面,至于为什么,就是开始没有想这么多,最后老板看了觉得这个抄前辈作品很成功,所以建议我们至少换换颜色,所以就开始换色了,其实我在开始的时候是做了一点点工作的,使用了宏定义了几个颜色,代码如下:

#define Color_BaseBule "rgb(68, 173, 165)"
#define Color_BaseYellow "rgb(255, 183, 67)"

这样其实我最后改变这两个值就可以,但是我可以要1周的摸鱼时间,嘿嘿,虽然最终的时间也没有用来摸鱼,但是至少不会那么紧张。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

QSS

Qt QSS(Qt Style Sheets)是一种用于定义和定制Qt应用程序界面外观的样式表语言。它可以通过设置属性、样式和布局改变控件外观和行为,从而实现界面的美化和个性化。

Qt QSS 具有以下几个主要作:

  1. 界面美化:使用 QSS 可以轻松修改 Qt 应用程序的外观,包括控件的颜色、字体、边框、背景等。通过调整样式表,可以使应用程序更加吸引、符合品牌形象或满足用户的审美需求。

  2. 主题切换:QSS 允许在运行时动态切换应用程序的主题。通过定义不同的样式表,可以实现不同的主题风格,例如浅色主题和深色主题,用户可以根据自己的喜好选择合适的主题。

  3. 控件定制:QSS 提供了丰富选择器和属性设置,可以对特定的控件进行个性化定制。通过修改控件的样式和布局,可以改变其外观和为,实现更灵活和独特的界面效果。

  4. 跨平台一致性:Qt QSS 可以帮助实现跨平台的界面一致性。通过编写统一的样式,可以确保应程序在不同的操作系统和设备上具有致的外观和用户体验。

总之Qt QSS 是一个强大的工具,可以通过样式表来定制和美化 Qt 应用程序的界面。它提供丰富的功能和灵活性,使开发人员能够轻松地实现个性化的面效果,并提升用户体验。

U盘检测

根据目前的经验来看,在Linux 应该是没有统一的,至少目前使用Arm Debian和Ubuntu 是不一样的额,需要稍微改动一下,下面代码是使用Arm Debian的情况。

基本原理都是通过使用Qt的QFileSystemWatcher来监控某一个文件夹,当有变化发生时,在确认下是否是U盘。

#define LISTENPATH  "/dev"                                                          // 默认监听路径
#include <QTimer>
XXXX::XXXX(QObject *parent): QObject{parent}
{mFileSystemWatcher = new QFileSystemWatcher;mFileSystemWatcher->addPath(LISTENPATH);connect(mFileSystemWatcher,&QFileSystemWatcher::directoryChanged,this,&XXXX::slot_DirectoryChanged);slot_GetSystemDevByName(LISTENPATH);
}XXXX::~XXXX()
{}
/*** @brief XXXX::slot_DirectoryChanged* @param path* 监测到有设备变化时草函数*/
void XXXX::slot_DirectoryChanged(QString path)
{slot_GetSystemDevByName(path);
}
/*** @brief XXXX::slot_GetSystemDevByName* @param path* 读取/dev文件夹下的所有文件*/
void XXXX::slot_GetSystemDevByName(QString path)
{QDir dir(path);QStringList temp;temp.clear();systemList.clear();systemList = dir.entryList(QDir::System,QDir::Name);for(auto i = 0;i< systemList.size();++i){if(systemList.at(i).indexOf(QRegExp("sd[a-z][1-9]")) > -1)                                           // 这里需要用一下正则表达式{temp.append(systemList.at(i));}}if(temp.count() >0){emit signal_USBDiskIn(temp.last());g_USBisIN = true;QTimer::singleShot(3000,this,[=](){if(Turing_Deploy::setDataPath(QString("/run/media/%1").arg(temp.last()))){emit signal_USBDiskIn(temp.last());g_USBisIN = true;}});}else{g_USBisIN = false;emit signal_USBDiskOut();}
}
QFileSystemWatcher

QFileSystemWatcher是Qt框架中的一个类,用于监视文件和目录的变化。它可以跟踪指定路径下的文件和目录的创建、修改、删除等操作,并在这些操作发生时发送信号通知应用程序。

使用QFileSystemWatcher,您可以实现以下功能:

  1. 监视文件和目录:您可以通过将文件或目录的路径添加到QFileSystemWatcher对象中来监视它们。一旦被监视的文件或目发生变化,比如被创建、修改或删除,QFileSystemWatcher会发出相应的信号。

  2. 多路径监视:QFileSystemWatcher支持同时监视多个文件和目录。您可以通过多次调用addPath()函数来添加要监视的路径。

  3. 递归监视:除了单个文件和录外,您可以使用addPaths()函数添加包含通配的路径模式,以便递归地监视多个文件和目录。

  4. 事件通知:当被监视的文件或目录发生变化时,QFileSystemWatcher会发出相应的信号,例如directoryChanged()、fileChanged()等。您可以连接这些信来执行特定的操作,比如更新UI界面或执行其他自定义逻辑。

需要注意的是,QFileSystemWatcher依赖于底层操作系统的文件系统通知机制。不同的操作系统对文件系统变化的知方式可能有不同,因在某些情况下,QFileSystemWatcher可能无法捕获到所有的文件系统变。

总之,QFileSystemWatcher是一个方便的具类,可用于监视文件和目录的变化,并在化发生时提供相应的通知。它在许多用程序中被广泛用于实监控文件系统的状态做出相应的响应。

屏幕键盘

不知道为什么,Qt 自带的屏幕软键盘是不好使的,没有办法,在当时情况下不存在自己写一个可能,所以直接发挥钞能力,买了一个,只能说是功能上能用,其他没有,满足目前阶段使用,就先这样。这里放下懒人链接https://download.csdn.net/download/z609932088/88078588

在这里插入图片描述

LibUSB 使用

LibUSB是一个开源的跨平台库,用于在用户空间中访问USB设备。它提供了一组API和工具,使开发人员能够直接与USB设备进行通信,而无需编写内核驱动程序。下面是关于LibUSB库的一些简介:

  1. 跨平台支持:LibUSB可在多个操作系统上使用,包括Windows、Linux、macOS和其他类Unix系统。这使得开发人员可以编写与USB设备交互的应用程序,并在不同的平台上进行部署。

  2. USB设备访问:LibUSB通过提供函数和数据结构来简化对USB设备的访问。它可以用于枚举连接的设备、打开设备句柄、发送和接收数据以及控制设备等操作。

  3. USB传输:LibUSB支持各种USB传输类型,包括控制传输、批量传输和中断传输。这使得开发人员可以灵活地与USB设备进行数据交换,并适应不同设备的需求。

  4. 设备事件处理:LibUSB允许开发人员注册回调函数来处理与USB设备相关的事件,如设备插入和移除事件。这样可以实现设备的热插拔,并根据需要进行相应的处理。

  5. USB描述符解析:LibUSB提供了工具函数来解析USB设备的描述符信息。这些描述符包含了有关设备的详细信息,如设备厂商、产品ID、接口和端点配置等。通过解析描述符,开发人员可以获取设备的特性并进行相应的操作。

  6. LibUSB-Win32:除了通用的LibUSB库外,还有一个称为LibUSB-Win32的特定于Windows的实现。它提供了对Windows系统上USB设备的访问,并集成了驱动程序安装和设备管理功能。

总之,LibUSB是一个强大的库,使开发人员能够在用户空间中直接与USB设备进行通信。它简化了USB设备的访问和控制,并提供了跨平台的支持,适用于各种USB设备相关的应用程序开发。而这个由于目前的代码涉及了业务逻辑,所以推荐大家看看我的的LibUSB的专栏http://t.csdn.cn/b1JEk

在这里插入图片描述

因为之前在Windows平台下,一直都是通过别人提供的dll库来和下位机通讯的,但是dll库是无法在Linux 下使用的,这里其实就可以写一个自己的驱动了,但是呢,我不会,所以这里用了一个开源的USB库,因为我们是有下位机源代码的,这样就可以更具协议,直接使用LibUSB库与下位机通讯,同样,暂时满足当下需求。

总结

好了,第二带软件开发就风向到这里,后面就要开始分享第三代的内容了。记得及时关注哦。第三代将使用Qml语言来做前端开发,后端还是C++,这里Qt 版本也会做下升级,其实我在这个时刻是蛮像升级Qt 6 的,不过有几个模块在博主写代码的时候还没有完全更新,所以为了稳定,暂时还是停留在Qt 5阶段,使用Qt 5.15.2 开发。


博客签名2021

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

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

相关文章

嵌入式Linux裸机开发(一)基础介绍及汇编LED驱动

系列文章目录 文章目录 系列文章目录前言IMX6ULL介绍主要资料IO表现形式 汇编LED驱动原理图初始化流程时钟设置IO复用设置电气属性设置使用GPIO 编写驱动编译程序编译.o文件地址链接.elf格式转换.bin反汇编&#xff08;其他&#xff09; 综合成Makefile完成一步编译烧录程序imx…

深度学习基础之参数量(3)

一般的CNN网络的参数量估计代码 class ResidualBlock(nn.Module):def __init__(self, in_planes, planes, norm_fngroup, stride1):super(ResidualBlock, self).__init__()print(in_planes, planes, norm_fn, stride)self.conv1 nn.Conv2d(in_planes, planes, kernel_size3, …

Python综合案例:学生管理系统

目录 需求说明&#xff1a; 功能&#xff1a; 创建入口函数&#xff1a; 实现菜单函数&#xff1a; 实现增删查操作&#xff1a; 1. 新增学生 2. 展示学生 3. 查找学生 4. 删除学生 加入存档读档&#xff1a; 1. 约定存档格式 2. 实现存档函数 3. 实现读档函数 打…

mysql双主互从通过KeepAlived虚拟IP实现高可用

mysql双主互从通过KeepAlived虚拟IP实现高可用 在mysql 双主互从的基础上&#xff0c; 架构图&#xff1a; Keepalived有两个主要的功能&#xff1a; 提供虚拟IP&#xff0c;实现双机热备通过LVS&#xff0c;实现负载均衡 安装 # 安装 yum -y install keepalived # 卸载 …

全志ARM926 Melis2.0系统的开发指引⑥

全志ARM926 Melis2.0系统的开发指引⑥ 编写目的9. 系统启动流程9.1. Shell 部分9.2.Orange 和 desktop 部分9.3. app_root 加载部分9.4. home 加载部分 10. 显示相关知识概述10.1. 总体结构10.2. 显示过程10.3. 显示宽高参数关系 -. 全志相关工具和资源-.1 全志固件镜像修改工具…

【开发篇】十五、Spring Task实现定时任务

文章目录 1、使用示例2、相关配置3、Scheduled注解4、Spring Task单线程下的阻塞坑5、Spring Task阻塞问题的处理思路6、Spring Task在分布式环境中 上一篇用Quartz来实现了定时任务&#xff0c;但相对来说&#xff0c;这个框架还是比较繁琐。Spring Boot默认在无任何第三方依赖…

minikube如何设置阿里云镜像以及如何解决dashboard无法打开的解决方案_已设置图床

minikube如何设置阿里云镜像以及如何解决dashboard无法打开的解决方案 minikube dashboard报错 considerconsider-Dell-G15-5511:~$ minikube dashboard &#x1f914; 正在验证 dashboard 运行情况 ... &#x1f680; 正在启动代理... &#x1f914; 正在验证 proxy 运行…

2023/9/27 -- ARM

【汇编语言相关语法】 1.汇编语言的组成部分 1.伪操作&#xff1a;不参与程序的执行&#xff0c;但是用于告诉编译器程序该怎么编译 .text .global .end .if .else .endif .data2.汇编指令 编译器将一条汇编指令编译成一条机器码&#xff0c;在内存里一条指令占4字节内…

【C++设计模式之原型模式:创建型】分析及示例

简介 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;它允许通过复制已有对象来生成新的对象&#xff0c;而无需再次使用构造函数。 描述 原型模式通过复制现有对象来创建新的对象&#xff0c;而无需显式地调用构造函数或暴露对象的创建…

013-第二代上位机开发环境搭建

第二代上位机开发环境搭建 文章目录 第二代上位机开发环境搭建项目介绍虚拟机安装Debian 10文件传输远程调试VNCrsync下载安装验证 配置远程调试环境配置远程设备配置 kitsCompilers配置Qtversions配置kits 测试 总结一下 关键字&#xff1a; Qt、 Qml、 关键字3、 关键字4…

Python常用功能的标准代码

后台运行并保存log 1 2 3 4 5 6 7 8 9 nohup python -u test.py > test.log 2>&1 & #最后的&表示后台运行 #2 输出错误信息到提示符窗口 #1 表示输出信息到提示符窗口, 1前面的&注意添加, 否则还会创建一个名为1的文件 #最后会把日志文件输出到test.log文…

八大排序算法汇总(C语言实现)

本专栏内容为&#xff1a;八大排序汇总 通过本专栏的深入学习&#xff0c;你可以了解并掌握八大排序以及相关的排序算法。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;八大排序汇总 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库…