Qt_IM_44 - 8BitsCoding/RobotMentor GitHub Wiki


// main.cpp
#include <QtCore/QCoreApplication>

#include "commander.h"

int main(int argc, char *argv[])
{
	QCoreApplication a(argc, argv);

	commander cmd;

	cmd.action(QByteArray("pwd"));
	cmd.action(QByteArray("ls -l"));


	return a.exec();
}
// commander.h
#pragma once

#include <QObject>
#include <qdebug.h>
#include <qprocess.h>

class commander : public QObject
{
	Q_OBJECT

public:
	commander(QObject *parent);
	~commander();

signals:

public slots:
	void readyRead();
	void action(QByteArray data);

private:
	QProcess proc;
	QString app;
	QString endl;
};
// commander.cpp
#include "commander.h"

commander::commander(QObject *parent)
	: QObject(parent)
{
#ifdef Q_OS_WIN
	// Windows
	app = "cmd";
	endl = "\r\n";
#else
	// others
	app = "bash";
	endl = "\n";
#endif

	proc.setProgram(app);
	proc.start();
	proc.setReadChannelMode(QProcess::MergedChannels);
	connect(&proc, &QProcess::readyRead, this, &commander::readyRead);
	connect(&proc, &QProcess::readyReadStandardOutput, this, &commander::readyRead);
	connect(&proc, &QProcess::readyReadStandardError, this, &commander::readyRead);
}

commander::~commander()
{
	if (proc.isOpen()) {
		proc.close();
	}
}

void commander::action(QByteArray data)
{
	if (!data.endsWith(endl.toLatin1())) data.append(endl);
	proc.write(data);
	proc.waitForBytesWritten(1000);
}


void commander::readyRead()
{
	qint64 value = 0;
	do {
		QByteArray line = proc.readAll();
		qInfo() << line.trimmed();
		value = line.length();
	} while (value > 0);
}
⚠️ **GitHub.com Fallback** ⚠️