写在开头
- 使用QProcess类打开外部程序并与之交互通信。
- 使用QDirIterator类浏览目录内容并且显示在QListView内。
- 使用QFlie类读写文件。
具体设计
- 检测USB设备是否插入,插入后可进入USB目录内的文本文件(.txt/.sh)并且显示在界面上。
- 选择界面上显示的文件可以打开查看和修改内容。
- 拔出USB会回到初始界面。
代码文件
1.checkusbform类
- 创建一个bash进程
- 每秒给bash发送[df -hT]根据返回值检测是否存在sdb设备,存在的话Enable按钮
- 点击PushButton创建openDir类,传递sdb的路径给openDir
- 接收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