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

在Linux和Windows系统下使用Qt监测U盘的插拔事件

在Linux和Windows系统下使用Qt监测U盘的插拔事件

  • Chapter1 在Linux系统下使用Qt监测U盘的插拔事件(方法1,使用lsblk命令)
    • 方法概述
  • Chapter2 在Linux或者Windows系统下使用Qt监测U盘的插拔事件(方法2,使用QStorageInfo类)
    • 1、概述
    • 2、重要方法
    • 3、重要信号
    • 4、试验结果


Chapter1 在Linux系统下使用Qt监测U盘的插拔事件(方法1,使用lsblk命令)

原文链接:https://blog.csdn.net/qq_44849154/article/details/129711381

本文在Qt提供一段监测U盘数量的一段代码,可以监听U盘的插入和拔出,亲测可用。

QStringList Widget::listUSBDevices()
{int i =0;QProcess piTerminal;piTerminal.start("sh",QStringList()<<"-c"<<"lsblk|grep media|grep part|grep -o -E '/.*'");piTerminal.waitForFinished();QString ret=piTerminal.readAllStandardOutput();QStringList list=ret.split("\n");if(list.size()!=1){for(i=0;i<list.size();i++){qDebug()<<list.at(i);//输出U盘的绝对路径ui->textBrowser->append(list.at(i));}ui->textBrowser->append(QString("检测到 %1个U盘").arg(i-1));}if(list.size()==1){qDebug()<<"未检测到U盘插入,请插入后重试";ui->textBrowser->append(QString("未检测到U盘插入,请插入后重试"));}return list;
}

使用Qt监测U盘的插拔事件也可以通过监听DBus信号实现。以下是分步说明和示例代码:

方法概述

  1. 使用DBus监听U盘事件:通过org.freedesktop.UDisks2服务,订阅InterfacesAdded和InterfacesRemoved信号。
  2. 过滤U盘设备:检查信号参数,确定是否为可移动USB存储设备。
  3. 处理挂载信息:通过DBus获取设备的挂载点和其他属性。

Chapter2 在Linux或者Windows系统下使用Qt监测U盘的插拔事件(方法2,使用QStorageInfo类)

原文链接:https://blog.csdn.net/ckg3824278/article/details/143859458

1、概述

QStorageInfo是Qt框架中用于获取和管理存储设备信息的类。它提供了关于当前系统中挂载的存储设备和驱动器的详细信息,包括空间大小、挂载点、标签名、文件系统名等。QStorageInfo类在Qt 5.4版本中引入,为开发人员提供了一个简洁而强大的接口来查询和管理系统中的存储设备信息。

2、重要方法

QStorageInfo类提供了一系列方法来获取存储设备的信息,以下是一些重要的方法:

  • QStorageInfo::mountedVolumes():返回当前系统中所有已挂载文件系统的列表。
  • QStorageInfo::root():返回根文件系统的QStorageInfo对象。
  • QStorageInfo::bytesTotal():返回存储设备的总字节数。
  • QStorageInfo::bytesAvailable():返回存储设备上可用的字节数。
  • QStorageInfo::bytesFree():返回存储设备上的空闲字节数(注意:在某些平台上,bytesFree()和bytesAvailable()可能返回相同的结果)。
  • QStorageInfo::name():返回存储设备的名称。
  • QStorageInfo::displayName():返回存储设备的显示名称。
  • QStorageInfo::fileSystemType():返回存储设备的文件系统类型。
  • QStorageInfo::isReadOnly():判断存储设备是否只读。
  • QStorageInfo::isReady():判断存储设备是否准备就绪。
  • QStorageInfo::isValid():判断QStorageInfo对象是否有效。
  • QStorageInfo::setPath(const QString &path):设置QStorageInfo对象的路径,以引用该路径所在的卷。
  • QStorageInfo::refresh():刷新QStorageInfo对象的信息,使其无效化缓存并重新检索。

3、重要信号

QStorageInfo类是一个静态类,主要提供用于查询存储设备信息的方法,而不涉及信号与槽的机制。因此,QStorageInfo类没有定义任何信号。

#include <QCoreApplication>
#include <QStorageInfo>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 获取当前系统中所有已挂载的文件系统列表QList<QStorageInfo> storageInfoList = QStorageInfo::mountedVolumes();// 遍历列表并打印每个存储设备的信息for (const QStorageInfo &storage : storageInfoList) {if (storage.isValid() && storage.isReady()) {qDebug() << "Name:" << storage.name();qDebug() << "Display Name:" << storage.displayName();qDebug() << "Root Path:" << storage.rootPath();qDebug() << "File System Type:" << storage.fileSystemType();qDebug() << "Total Bytes:" << storage.bytesTotal() / (1024 * 1024) << "MB";qDebug() << "Available Bytes:" << storage.bytesAvailable() / (1024 * 1024) << "MB";qDebug() << "Read Only:" << storage.isReadOnly();}}return a.exec();
}

4、试验结果

void Widget::debugStorageInfo()
{foreach (const QStorageInfo &storage, QStorageInfo::mountedVolumes()) {qDebug() << "Device:" << storage.device()<< "Root:" << storage.rootPath()<< "FS:" << storage.fileSystemType()<< "Size:" << storage.bytesTotal() / (1024 * 1024) << "MB"<< "USB:" << (isUSBDevice(storage) ? "Yes" : "No");//                if(storage.fileSystemType() == "FAT32")if(storage.fileSystemType() == "vfat"){qDebug() << QString::fromLocal8Bit("U盘名称为:")<<storage.name()<< QString::fromLocal8Bit("U盘路径为:")<<storage.rootPath();}}
}bool Widget::isUSBDevice(const QStorageInfo &storage)
{// Linux系统下通过设备路径判断if (storage.device().contains("/dev/sd") || storage.device().contains("/dev/disk/by-id/usb")) {return true;}// Windows系统下通过设备类型判断//        if (storage.fileSystemType() == "NTFS" || storage.fileSystemType() == "FAT32") {if (storage.fileSystemType() == "vfat") {// 可能需要更精确的判断逻辑return true;}return false;
}
    QString diskPath = usbdisk.debugStorageInfo();// 检查是否是升级U盘if (QFile::exists(diskPath + "/upgrade/package.upg.zip")) {QMessageBox::information(this, tr("检测到升级U盘"),tr("发现升级文件,是否开始升级?"));}

文章转载自:

http://qzzFromQ.htrzp.cn
http://6EBlCxOp.htrzp.cn
http://36R8L9lc.htrzp.cn
http://6JFPskA3.htrzp.cn
http://4RRG6KO7.htrzp.cn
http://5wisZjZT.htrzp.cn
http://1P3t97pv.htrzp.cn
http://fBvdjo6V.htrzp.cn
http://Vz55g448.htrzp.cn
http://rMfDJttM.htrzp.cn
http://ONxkRwol.htrzp.cn
http://Fd1kq0Zm.htrzp.cn
http://zFEkcSa4.htrzp.cn
http://AQ5SPXBX.htrzp.cn
http://kX6vj7Jx.htrzp.cn
http://X77w83uc.htrzp.cn
http://Vtw9AjFD.htrzp.cn
http://4VKMtxOq.htrzp.cn
http://LLbKQRIx.htrzp.cn
http://NCWbriHh.htrzp.cn
http://HFIJxSdn.htrzp.cn
http://X3qHficm.htrzp.cn
http://9btiS7A4.htrzp.cn
http://DJH8fwsj.htrzp.cn
http://co1qod4a.htrzp.cn
http://cjHve6KN.htrzp.cn
http://Bn1jZucj.htrzp.cn
http://GRbCL6Gf.htrzp.cn
http://dTvqQzYs.htrzp.cn
http://3cpkoPDE.htrzp.cn
http://www.dtcms.com/a/386954.html

相关文章:

  • 文字识别接口的应用场景-发票识别接口-OCR API
  • 鸿蒙NEXT ArkWeb同层渲染:原生与Web的完美融合
  • 基于springboot的4s店汽车销售服务系统
  • ARM芯片的调试访问端口 DAP(Debug Access Port)
  • 减少推导式中的重复计算:赋值表达式(:=)的优雅应用 (Effective Python 第29条)
  • 空压机远程控制与数据采集的御控物联网解决方案
  • 瑞萨MCU RA4M1 FLASH锁死问题记录
  • Kubernetes 调度器(Scheduler)
  • Java设计模型-责任链模式
  • Linux 服务器安全优化:firewalld SSH 限制 白名单与 SCP 服务禁用流程
  • bisheng 智能体
  • 学完Python之后我写了一个免费看电影的软件
  • 【ROS2】Concept(Advanced )
  • Apifox自动化测试场景设计
  • 知识复用缺乏跨角色适配该如何改善
  • XML 与 YML 全方位对比:从语法到应用场景
  • pandas方法集
  • PAT乙级_1106 2019数列_Python_AC解法_含疑难点
  • 自动检测并交互删除未使用 Docker 自定义网桥
  • 物联网卡相关知识
  • 访答编辑器使用体验
  • 日常系统问题解决:数据库查询停止
  • 5.3 文件系统 (答案见原书)
  • 【C++】C++11(一)
  • 两数的乘积 = 最大公约数 × 最小公倍数
  • 【Block总结】FDConv,多频动态调制卷积模块|即插即用|CVPR2025
  • Python 爬虫入门:如何抓取电商网站商品数据
  • 2025年上半年软考系统架构设计师备考指南
  • 双反向传播训练光子神经网络(未做完)
  • Java和rust的AES加解密算法互相转化,秘钥key格式不一致带来的问题