Linux QT/C++ 使用bash检测USB设备并且打开目录和文件

该博客介绍了如何使用Linux QT/C++通过bash检测USB设备,并在设备插入时进入USB目录,展示及操作.txt和.sh文件。采用QProcess、QDirIterator和QFile类进行文件和目录的操作,当USB设备被拔出时,程序会返回初始界面。
摘要由CSDN通过智能技术生成

写在开头

  1. 使用QProcess类打开外部程序并与之交互通信。
  2. 使用QDirIterator类浏览目录内容并且显示在QListView内。
  3. 使用QFlie类读写文件。

具体设计

  • 检测USB设备是否插入,插入后可进入USB目录内的文本文件(.txt/.sh)并且显示在界面上。
  • 选择界面上显示的文件可以打开查看和修改内容。
  • 拔出USB会回到初始界面。

代码文件

在这里插入图片描述

1.checkusbform类

  1. 创建一个bash进程
  2. 每秒给bash发送[df -hT]根据返回值检测是否存在sdb设备,存在的话Enable按钮
  3. 点击PushButton创建openDir类,传递sdb的路径给openDir
  4. 接收openDir的退出信号,收到后退出openDir界面回到checkusbform界面。

checkusbform.ui
在这里插入图片描述checkusbform.h

#ifndef CHECKUSBFORM_H
#define CHECKUSBFORM_H
#include "opendir.h"
#include <QWidget>
#include <QProcess>
#include <QScrollBar>
#include <QDebug>
#include <QCryptographicHash>
#include <QTime>

namespace Ui {
   class CheckUsbForm;}
class CheckUsbForm : public QWidget
{
   
    Q_OBJECT
public:
    explicit CheckUsbForm(QWidget *parent = nullptr);
    ~CheckUsbForm();
    void timerEvent(QTimerEvent *event);//每秒给bash发命令去检测sdb设备
private:
    Ui::CheckUsbForm *ui;
    QProcess *m_proces_bash;
    QString UsbPath;
    bool isHaveUsbDevice;
    int checkUsbDeviceTime;
    openDir *Dir;
private slots:
    void readBashStandardOutputInfo();//接收bash的正常返回信息
    void readBashStandardErrorInfo(); //接收bash的错误返回信息
    void sendInfoToBash();            //给bash发命令
    void on_pushButton_clicked();
    void DirExitSlot();
signals:
    void NoUsbDevice();
};
#endif // CHECKUSBFORM_H

checkusbform.cpp

#include "checkusbform.h"
#include "ui_checkusbform.h"
//1.创建一个bash进程
//2.每秒给bash发送[df -hT]根据返回值检测是否存在sdb
//3.存在的话Enable PushButton
//4.点击PushButton创建openDir类,传递sdb的路径给openDir
//5.接收openDir的退出信号
CheckUsbForm::CheckUsbForm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::CheckUsbForm)
{
   
    ui->setupUi(this);
    Dir = new openDir();
    isHaveUsbDevice = 0;
    ui->pushButton->setDisabled(true);
    m_proces_bash = new QProcess;
    m_proces_bash->start("bash");//启动外部程序bash
    m_proces_bash->waitForStarted();//阻塞,直到程序打开
    connect(m_proces_bash,SIGNAL(readyReadStandardOutput()),this,SLOT(readBashStandardOutputInfo()));
    connect(m_proces_bash,SIGNAL(readyReadStandardError()),this,SLOT(readBashStandardErrorInfo()));

    sendInfoToBash();
    checkUsbDeviceTime = startTimer(1000);
}

CheckUsbForm::~CheckUsbForm()
{
   
    delete ui;
}

//每秒都去检测USB路径
void CheckUsbForm::timerEvent(QTimerEvent 
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值