第二代软件开发
文章目录
- 第二代软件开发
- 项目介绍
- 正式开始我们的Debian Qt 软件开发
- 主题色
- QSS
- U盘检测
- QFileSystemWatcher
- 屏幕键盘
- LibUSB 使用
- 总结
关键字:
Qt
、
Qml
、
U盘检测
、
屏幕键盘
、
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 具有以下几个主要作:
界面美化:使用 QSS 可以轻松修改 Qt 应用程序的外观,包括控件的颜色、字体、边框、背景等。通过调整样式表,可以使应用程序更加吸引、符合品牌形象或满足用户的审美需求。
主题切换:QSS 允许在运行时动态切换应用程序的主题。通过定义不同的样式表,可以实现不同的主题风格,例如浅色主题和深色主题,用户可以根据自己的喜好选择合适的主题。
控件定制:QSS 提供了丰富选择器和属性设置,可以对特定的控件进行个性化定制。通过修改控件的样式和布局,可以改变其外观和为,实现更灵活和独特的界面效果。
跨平台一致性: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,您可以实现以下功能:
监视文件和目录:您可以通过将文件或目录的路径添加到QFileSystemWatcher对象中来监视它们。一旦被监视的文件或目发生变化,比如被创建、修改或删除,QFileSystemWatcher会发出相应的信号。
多路径监视:QFileSystemWatcher支持同时监视多个文件和目录。您可以通过多次调用addPath()函数来添加要监视的路径。
递归监视:除了单个文件和录外,您可以使用addPaths()函数添加包含通配的路径模式,以便递归地监视多个文件和目录。
事件通知:当被监视的文件或目录发生变化时,QFileSystemWatcher会发出相应的信号,例如directoryChanged()、fileChanged()等。您可以连接这些信来执行特定的操作,比如更新UI界面或执行其他自定义逻辑。
需要注意的是,QFileSystemWatcher依赖于底层操作系统的文件系统通知机制。不同的操作系统对文件系统变化的知方式可能有不同,因在某些情况下,QFileSystemWatcher可能无法捕获到所有的文件系统变。
总之,QFileSystemWatcher是一个方便的具类,可用于监视文件和目录的变化,并在化发生时提供相应的通知。它在许多用程序中被广泛用于实监控文件系统的状态做出相应的响应。
屏幕键盘
不知道为什么,Qt 自带的屏幕软键盘是不好使的,没有办法,在当时情况下不存在自己写一个可能,所以直接发挥钞能力,买了一个,只能说是功能上能用,其他没有,满足目前阶段使用,就先这样。这里放下懒人链接https://download.csdn.net/download/z609932088/88078588
LibUSB 使用
LibUSB是一个开源的跨平台库,用于在用户空间中访问USB设备。它提供了一组API和工具,使开发人员能够直接与USB设备进行通信,而无需编写内核驱动程序。下面是关于LibUSB库的一些简介:
跨平台支持:LibUSB可在多个操作系统上使用,包括Windows、Linux、macOS和其他类Unix系统。这使得开发人员可以编写与USB设备交互的应用程序,并在不同的平台上进行部署。
USB设备访问:LibUSB通过提供函数和数据结构来简化对USB设备的访问。它可以用于枚举连接的设备、打开设备句柄、发送和接收数据以及控制设备等操作。
USB传输:LibUSB支持各种USB传输类型,包括控制传输、批量传输和中断传输。这使得开发人员可以灵活地与USB设备进行数据交换,并适应不同设备的需求。
设备事件处理:LibUSB允许开发人员注册回调函数来处理与USB设备相关的事件,如设备插入和移除事件。这样可以实现设备的热插拔,并根据需要进行相应的处理。
USB描述符解析:LibUSB提供了工具函数来解析USB设备的描述符信息。这些描述符包含了有关设备的详细信息,如设备厂商、产品ID、接口和端点配置等。通过解析描述符,开发人员可以获取设备的特性并进行相应的操作。
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 开发。