014-第二代软件开发

news2024/11/18 19:38:04
头图

第二代软件开发

文章目录

  • 第二代软件开发
    • 项目介绍
    • 正式开始我们的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.coloradmin.cn/o/1062793.html

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

相关文章

Qt 综合练习小项目--反金币(2/2)

目录 4 选择关卡场景 4.2 背景设置 4.3 创建返回按钮 4.3 返回按钮 4.4 创建选择关卡按钮 4.5 创建翻金币场景 5 翻金币场景 5.1 场景基本设置 5.2 背景设置 5.3 返回按钮 5.4 显示当前关卡 5.5 创建金币背景图片 5.6 创建金币类 5.6.1 创建金币类 MyCoin 5.6.…

GPT系列论文解读:GPT-2

GPT系列 GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一系列基于Transformer架构的预训练语言模型&#xff0c;由OpenAI开发。以下是GPT系列的主要模型&#xff1a; GPT&#xff1a;GPT-1是于2018年发布的第一个版本&#xff0c;它使用了12个Transformer…

JavaEE 网络原理——TCP的工作机制(中篇 三次握手和四次挥手)

文章目录 一、TCP 内部工作机制——连接管理1. 连接(三次握手)(1).有连接和确认应答之间的关系(2). 通过客户端和服务器详细描述三次握手 2. 断开连接(四次挥手)(1)讨论“四次握手”中间步骤的合并问题。(2) 根据简单的 TCP 代码解释断开连接(3) 四次挥手中的两个重要的 TCP 状…

计算机网络-计算机网络体系结构-物理层

目录 一、通信基础 通信方式 传输方式 码元 传输率 *二 准则 2.1奈氏准则(奈奎斯特定理) 2.2香农定理 三、信号的编码和调制 *数字数据->数字信号 数字数据->模拟信号 模拟数据->数字信号 模拟数据->模拟信号 *四、数据交换方式 电路交换 报文交换…

【刷题笔记10.5】LeetCode:排序链表

LeetCode&#xff1a;排序链表 一、题目描述 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 二、分析 这题咱们默认要求&#xff1a;空间复杂度为O(1)。所以这把咱们用自底向上的方法实现归并排序&#xff0c;则可以达到O(1) 的空间复杂…

[极客大挑战 2019]FinalSQL - 异或盲注

1、这题的关键是找注入点&#xff0c;如果选择用户名、密码作为输入点就麻烦了 2、注入点&#xff1a;按钮&#xff0c;点击就传id&#xff1b;当id1时&#xff0c;提示Click others   可以利用id的特性&#xff0c;构造异或匹配   payload: f"1^(ord(substr((select…

nodejs+vue中医体质的社区居民健康管理系统elementui

可以实现首页、中医体质量表、健康文章、健康视频、我的等&#xff0c;在我的页面可以对医生、小区单元、医疗药品等功能进行操作。目前主要的健康管理系统是以西医为主&#xff0c;而为了传扬中医文化&#xff0c;提高全民健康意识&#xff0c;解决人民日益增长的美好生活需要…

基于SpringBoot的图书进销存管理系统

目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 图书类型管理 商品退货管理 客户信息管理 图书添加 客户添加 应收金额 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实…

Ubuntu无法引导启动的修复

TLDR&#xff1a;使用Boot-Repair工具。 Boot-Repair Boot-Repair是一个简单的工具&#xff0c;用于修复您在Ubuntu中可能遇到的常见启动问题&#xff0c;例如在安装Windows或其他Linux发行版后无法启动Ubuntu时&#xff0c;或者在安装Ubuntu后无法启动Windows时&#xff0c;…

[CISCN 2019华北Day2]Web1 - 布尔盲注

考点&#xff1a;布尔盲注【注意&#xff0c;sql中的substr初始位置是1不是0】 1、页面提示用id传参&#xff0c;而且我们发现是post传参 2、我们传了id1后提示“Hello, glzjin wants a girlfriend.“ 3、由于这题直接输入查询字符&#xff0c;可以通过字典爆破过滤&#xff0…

深度学习基础之参数量(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, …

人机关系不是物理关系也不是数理关系

人机关系是一种复杂的社会技术系统&#xff0c;涉及到人类和机器、环境之间的相互作用和影响。它不仅限于物理接触和数理规律&#xff0c;同时还包括了思维、情感、意愿等方面的交流和互动。在人机关系中&#xff0c;人类作为使用者和机器作为工具&#xff08;将来可能会上升到…

rust入门一:安装 Hello World

环境&#xff1a; window 11 专业版rust 1.72.1 一、下载安装 直接去官网&#xff1a; https://www.rust-lang.org/tools/install 下载完成后如下&#xff1a; 双击运行一步步安装就行。 如果是更新或卸载&#xff0c;在命令行中运行&#xff1a; rustup update&#xff1a…

ChatGPT基础使用总结

文章目录 一、ChatGPT基础概念大型语言模型LLMs---一种能够以类似人类语言的方式“说话”的软件ChatGPT定义---OpenAI 研发的一款聊天机器人程序&#xff08;2022年GPT-3.5&#xff0c;属于大型语言模型&#xff09;ChatGPT4.0---OpenAI推出了GPT系列的最新模型ChatGPT典型使用…

[GXYCTF2019]禁止套娃 无回显 RCE 过滤__FILE__ dirname等

扫除git 通过githack 获取index.php <?php include "flag.php"; echo "flag在哪里呢&#xff1f;<br>"; if(isset($_GET[exp])){if (!preg_match(/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i, $_GET[exp])) {if(; preg_replace(/[a-z,_]\(…

DevicData-D-XXXXXXXX勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复

引言&#xff1a; 在数字时代&#xff0c;数据安全成为一项至关重要的挑战。DevicData-D-XXXXXXXX勒索病毒&#xff08;以下简称DevicData病毒&#xff09;是这场战斗中的新敌人&#xff0c;它能够以毁灭性的方式加密您的数据&#xff0c;迫使您在数据和时间之间做出艰难的选择…

nodejs+vue游戏测评交流系统elementui

可以实现首页、发布招募、公司资讯、我的等&#xff0c;另一方面来说也可以提高在游戏测评交流方面的效率给相关管理人员的工作带来一定的便利。在我的页面可以对游戏攻略、我的收藏管理、实际上如今信息化成为一个未来的趋势或者可以说在当前现代化的城市典范中,发布招募等功能…

[图论]哈尔滨工业大学(哈工大 HIT)学习笔记23-31

视频来源&#xff1a;4.1.1 背景_哔哩哔哩_bilibili 目录 1. 哈密顿图 1.1. 背景 1.2. 哈氏图 2. 邻接矩阵/邻接表 3. 关联矩阵 3.1. 定义 4. 带权图 1. 哈密顿图 1.1. 背景 &#xff08;1&#xff09;以地球为建模&#xff0c;从一个大城市开始遍历其他大城市并且返回…

逆变器下垂控制单机

仿真控制参数 主电路 坐标变换 功率计算 下垂控制 电压电流双闭环控制 结果变量监控 断路器闭合&#xff0c;负载突增 负载突增&#xff0c;有功和无功突增 有功增加&#xff0c;频率减小 无功增加&#xff0c;参考电压减小

【JavaScript】相等运算符(== 和 ===)

如果x和y的类型相同&#xff0c;JavaScript会用equals 方法比较这两个值或对象。 没有出现在表格中的情况都会返回 false。&#xff08;表格中的方法都是内部规定的&#xff09; 对于 toNumber 方法&#xff1a; 对于 toPrimitive 方法&#xff1a; // 举个例子&#xff1a; c…