Qt 获取当前系统中连接的所有USB设备的信息 lsusb版

news/2024/11/13 17:02:10/

Qt 获取当前系统中连接的所有USB设备的信息 lsusb版

flyfish

环境
Ubuntu22.04
Qt 6.2.4

实现的功能

枚举USB设备:使用lsusb命令获取当前系统中连接的所有USB设备的信息。
解析设备信息:将lsusb命令的输出按行分割,并提取每行中的总线号、设备号和设备描述。
写入文件:将提取的设备信息写入指定的文本文件中。

#include <QCoreApplication>
#include <QProcess>
#include <QStringList>
#include <QTextStream>
#include <QDebug>
#include <QFile>// 枚举USB设备并将结果写入文件
void enumerateUSBDevices(const QString &outputFilePath) {// 创建一个QProcess对象,用于执行外部命令QProcess process;// 启动lsusb命令process.start("lsusb");if (!process.waitForStarted()) {  // 等待命令启动qCritical() << "Failed to start lsusb command";  // 如果命令启动失败,输出错误信息return;}if (!process.waitForFinished()) {  // 等待命令执行完成qCritical() << "Failed to finish lsusb command";  // 如果命令执行失败,输出错误信息return;}// 获取命令的输出QString output = process.readAllStandardOutput();  // 读取命令的标准输出QStringList lines = output.split('\n');  // 将输出按行分割// 打开输出文件QFile file(outputFilePath);if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {  // 以写入文本模式打开文件qCritical() << "Failed to open file for writing:" << outputFilePath;  // 如果文件打开失败,输出错误信息return;}// 创建文本流,用于写入文件QTextStream out(&file);// 遍历每一行输出foreach (const QString &line, lines) {if (!line.isEmpty()) {  // 跳过空行// 分割行以提取设备信息QStringList parts = line.split(' ');  // 按空格分割行QString bus = parts[1];  // 提取总线号QString device = parts[3].mid(0, 3);  // 提取设备号QString description = line.mid(line.indexOf(parts[5]));  // 提取设备描述// 打印设备信息qDebug() << "Bus:" << bus << "Device:" << device << "Description:" << description;// 写入文件out << "Bus: " << bus << " Device: " << device << " Description: " << description << "\n";}}// 关闭文件file.close();
}int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);  // 创建QCoreApplication对象,用于管理应用程序的事件循环// 枚举USB设备并将结果写入文件QString outputFilePath = "usb_devices.txt";  // 指定输出文件路径enumerateUSBDevices(outputFilePath);  // 调用函数枚举USB设备qDebug() << "USB devices have been enumerated and written to" << outputFilePath;  // 输出提示信息// 如果不需要事件循环,可以直接退出return 0;
}

涉及的Qt函数及其作用
QProcess:

QProcess process;:创建一个QProcess对象,用于执行外部命令。
process.start("lsusb");:启动lsusb命令。
process.waitForStarted();:等待命令启动。
process.waitForFinished();:等待命令执行完成。
process.readAllStandardOutput();:读取命令的标准输出。

QString:

QString output = process.readAllStandardOutput();:将命令的输出读取为QString。
QStringList lines = output.split('\n');:将字符串按行分割为QStringList。
QStringList:
QStringList parts = line.split(' ');:将字符串按空格分割为QStringList。

QFile:

QFile file(outputFilePath);:创建一个QFile对象,用于操作文件。
file.open(QIODevice::WriteOnly | QIODevice::Text);:以写入文本模式打开文件。
file.close();:关闭文件。

QTextStream:

QTextStream out(&file);:创建一个QTextStream对象,用于写入文件。
out << "Bus: " << bus << " Device: " << device << " Description: " << description << "\n";:将设备信息写入文件。

qDebug 和 qCritical:

qDebug() << "Bus:" << bus << "Device:" << device << "Description:" << description;:输出调试信息。
qCritical() << "Failed to start lsusb command";:输出错误信息。

QCoreApplication:

QCoreApplication a(argc, argv);:创建一个QCoreApplication对象,用于管理应用程序的事件循环。
return a.exec();:启动事件循环。在这个示例中,我们不需要事件循环,所以直接返回0

http://www.ppmy.cn/news/1546723.html

相关文章

CentOS 安装 Python 3.11.9完整流程

在 CentOS 上安装 Python 3.11.9 并替换系统中的默认 Python 版本&#xff0c;可以按照以下步骤来进行。请注意&#xff0c;替换默认 Python 版本可能会影响系统的其他工具和依赖&#xff0c;因此请谨慎操作。 步骤 1&#xff1a;安装依赖 首先&#xff0c;确保系统安装了编译…

计算机毕业设计Python+大模型斗鱼直播可视化 直播预测 直播爬虫 直播数据分析 直播大数据 大数据毕业设计 机器学习 深度学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

Docker:镜像构建 DockerFile

Docker&#xff1a;镜像构建 DockerFile 镜像构建docker build DockerfileFROMCOPYENVWORKDIRADDRUNCMDENTRYPOINTUSERARGVOLUME 镜像构建 在Docker官方提供的镜像中&#xff0c;大部分都是基础镜像&#xff0c;他们只提供某个简单的功能&#xff0c;如果想要一个功能更加丰富…

大型系统从一种语言迁移重构到另一种语言的核心思路是什么

从大的方面拆分为两个层次的问题。 要不要做 要不要做本质上是要分析做的利弊&#xff0c;适合用SWOT分析法。所谓SWOT分析&#xff0c;即基于内外部竞争环境和竞争条件下的态势分析&#xff0c;就是将与研究对象密切相关的各种主要内部优势、劣势和外部的机会和威胁等&#xf…

LeetCode【0019】删除链表的倒数第N个结点

本文目录 1 中文题目2 求解方法&#xff1a;虚拟头节点和快慢指针2.1 方法思路2.2 Python代码2.3 复杂度分析 3 题目总结 1 中文题目 给定一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例&#xff1a; 链表如上&#xff1a; 输入&a…

Oracle OCP认证考试考点详解082系列16

题记&#xff1a; 本系列主要讲解Oracle OCP认证考试考点&#xff08;题目&#xff09;&#xff0c;适用于19C/21C,跟着学OCP考试必过。 76. 第76题&#xff1a; 题目 解析及答案&#xff1a; 以下哪三项活动会被记录在数据库的警报日志中&#xff1f; A. 块损坏错误 数据库…

Conpair: 配对样本一致性concordance与污染contamination分析

Conpair 于2016年被发表在《Bioinformatics》上&#xff0c;用于分析配对样本&#xff08;如某个病人的肿瘤样本和正常样本&#xff09;WGS或WES测序的一致性和交叉个体污染。 特点 支持的基因组 因为需要指定markers选项&#xff0c;作者只提供了GRCh37, GRCh38, GRCm38的文…

Science Robotics 综述揭示演化研究新范式,从机器人复活远古生物!

在地球46亿年的漫长历史长河中&#xff0c;生命的演化过程充满着未解之谜。如何从零散的化石证据中还原古生物的真实面貌&#xff1f;如何理解关键演化节点的具体过程&#xff1f;10月23日&#xff0c;Science Robotics发表重磅综述&#xff0c;首次系统性提出"古生物启发…