/
ProcessHandler.cpp
85 lines (70 loc) · 2.32 KB
/
ProcessHandler.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include "ProcessHandler.h"
#include <QCoreApplication>
ProcessHandler::ProcessHandler(QList<int> vehicles, QList<QGeoCoordinate> waypoints, QGeoCoordinate depot, QObject *parent) : QObject(parent)
{
myProcess = new QProcess(this);
QString program = "python";
QStringList arguments;
QString appPath = QCoreApplication::applicationDirPath() + "/somav_cvrptw.py";
arguments << appPath;
QString vehiclesList = buildVehiclesList(vehicles);
QString waypointsList = buildWaypointsList(waypoints);
qDebug() << waypointsList;
QString depotStr = "Depot:" + QString::number(depot.latitude()) + "+" + QString::number(depot.longitude());
arguments << vehiclesList << waypointsList << depotStr;
myProcess->start(program, arguments);
connect(myProcess, SIGNAL(stateChanged(QProcess::ProcessState)), this, SLOT(printProcessStatus()));
connect(myProcess, SIGNAL(error(QProcess::ProcessError)), this, SLOT(printProcessError()));
connect(myProcess, SIGNAL(readyRead()), this, SLOT(printProcessOutput()));
}
void ProcessHandler::printProcessError()
{
QString error = myProcess->errorString();
qDebug() << "Error: " << error;
emit errorReceived(error);
}
void ProcessHandler::printProcessOutput()
{
QString out = myProcess->readAll();
qDebug() << "Proc out: " << out;
emit outputReceived(out);
}
void ProcessHandler::printProcessStatus()
{
QProcess::ProcessState state = myProcess->state();
QString status;
if(state == 1)
status = "Starting";
else if(state == 2)
status = "Running";
else
status = "Not Running";
qDebug() << status;
emit statusReceived(status);
if(state == 0)
{
myProcess->close();
}
}
QString ProcessHandler::buildVehiclesList(QList<int> vehicles)
{
QString result = "Vehicles:";
for(int i = 0; i < vehicles.count(); i++)
{
if(i > 0)
result.append(",");
result.append(QString::number(vehicles[i]));
}
return result;
}
QString ProcessHandler::buildWaypointsList(QList<QGeoCoordinate> waypoints)
{
QString result = "Waypoints:";
for(int i = 0; i < 20; i++)
{
if(i > 0)
result.append(",");
result.append(QString::number(waypoints[i].latitude()) + "+" + QString::number(waypoints[i].longitude()));
}
return result;
}