-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.cpp
88 lines (63 loc) · 2.01 KB
/
utils.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
86
87
88
#include <string.h>
#include <QStringList>
#include <QString>
#include <QProcess>
#include <QDebug>
#include <QObject>
#include <QPainter>
#include "node.cpp"
#pragma once
namespace Util {
char* concat_const_char(const char* word1, const char* word2)
{
// Not safe, consider fixing.
char * s = new char[strlen(word1) + strlen(word2) + 1];
strcpy(s, word1);
strcat(s, word2);
return s;
}
// exec traceroute
/*
* https://stackoverflow.com/questions/19409940/how-to-get-output-system-command-in-qt
* https://stackoverflow.com/questions/3227767/how-to-run-a-system-command-in-qt
*
* */
QStringList exec_traceroute(Node* target)
{
QStringList retval;
QString command = "tracepath";
#ifdef _WIN32
command = "tracert";
#endif
QProcess process;
process.start(command + " " + target->ip);
//process.waitForFinished();
/*QObject::connect(&process, SIGNAL(finished(int, QProcess::ExitStatus)), [=, &process]() {
QString out = process.readAllStandardOutput();
QString err = process.readAllStandardError();
qDebug() << "Traceroute stdout: " << out;
qDebug() << "Traceroute stderr: " << err;
//retval.append(out);
//return retval;
});*/
/**/
return retval;
}
void DrawLineWithArrow(QPainter& painter, QPoint start, QPoint end) {
painter.setRenderHint(QPainter::Antialiasing, true);
qreal arrowSize = 20; // size of head
painter.setPen(Qt::green);
painter.setBrush(Qt::green);
QLineF line(end, start);
double angle = std::atan2(-line.dy(), line.dx());
QPointF arrowP1 = line.p1() + QPointF(sin(angle + M_PI / 3) * arrowSize,
cos(angle + M_PI / 3) * arrowSize);
QPointF arrowP2 = line.p1() + QPointF(sin(angle + M_PI - M_PI / 3) * arrowSize,
cos(angle + M_PI - M_PI / 3) * arrowSize);
QPolygonF arrowHead;
arrowHead.clear();
arrowHead << line.p1() << arrowP1 << arrowP2;
painter.drawLine(line);
painter.drawPolygon(arrowHead);
}
}