@JonB sure, here ya go :D
#ifndef HCITOOLPROCESS_H
#define HCITOOLPROCESS_H
#include <QObject>
#include <QProcess>
#include <QElapsedTimer>
#include <iostream>
class HciToolProcess : public QObject
{
Q_OBJECT
public:
struct CommandAndArguments{
QString command;
QStringList arguments;
};
explicit HciToolProcess(QObject *parent = nullptr) : QObject(parent), m_index{-1}
{
connect(&m_process, QOverload<int,QProcess::ExitStatus>::of(&QProcess::finished), this, &HciToolProcess::onProcessFinished);
}
bool startProcess(QList<CommandAndArguments> commands){
if(m_index != -1 || commands.isEmpty())
return false;
m_cmdAndArgs = commands;
m_elapsedTime.start();
//m_index is -1 so the function will set it to 0
processCommandAndArguments();
return true;
}
signals:
void timeElapsed(const QString &time); // to update your textEdit_2
void allProcessesDone();
private:
void processCommandAndArguments(){
m_index++;
if(m_index < m_cmdAndArgs.size()){
m_process.start(m_cmdAndArgs.at(m_index).command, m_cmdAndArgs.at(m_index).arguments, QIODevice::ReadWrite);
} else {
m_index = -1;
emit allProcessesDone();
}
}
void onProcessFinished(int exitCode, QProcess::ExitStatus exitStatus){
std::cout<<"\n * Program to demonstrate the usage of linux commands in qt * \n";
QString StdOut = m_process.readAllStandardOutput(); //Reads standard output
QString StdError = m_process.readAllStandardError(); //Reads standard error
std::cout<<"\n Printing the standard output..........\n";
std::cout<<std::endl<<StdOut.toStdString();
std::cout<<"\n Printing the standard error..........\n";
std::cout<<std::endl<<StdError.toStdString();
std::cout<<"\n Printing exit code..........\n";
std::cout<<std::endl<<exitCode;
std::cout<<"\n Printing exitStatus..........\n";
std::cout<<std::endl<<exitStatus;
std::cout<<"\n\n";
QString elapsedTime = QString::number(m_elapsedTime.restart());
emit timeElapsed(elapsedTime);
processCommandAndArguments();
}
private:
QElapsedTimer m_elapsedTime;
QProcess m_process;
QList<CommandAndArguments> m_cmdAndArgs;
int32_t m_index;
};
#endif // HCITOOLPROCESS_H