本文整理汇总了C++中QCPGraph::setName方法的典型用法代码示例。如果您正苦于以下问题:C++ QCPGraph::setName方法的具体用法?C++ QCPGraph::setName怎么用?C++ QCPGraph::setName使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QCPGraph
的用法示例。
在下文中一共展示了QCPGraph::setName方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: updateCurve
void OdroidReader::updateCurve(int row, int col) {
if (col != 0) return;
bool enable = ui->sensors->item(row,col)->checkState() == Qt::Checked;
if (enable && graphs.at(row) == nullptr) {
if (origcols.count() == 0) {
ui->sensors->item(row,col)->setCheckState(Qt::Unchecked);
return;
}
QColor color = origcols.takeFirst();
QCPGraph* graph = ui->globalPlot->addGraph();
DataSeries* series = data[rowMap[row]];
graph->setName(series->descriptor->name());
graph->setProperty("unit",series->descriptor->unit());
graph->setPen(color);
graph->setData(series->getTimestamps(), series->getValues());
connect(series,&DataSeries::newValue,[graph,this](double time, double value) {
graph->addData(time,value);
ui->globalPlot->rescaleAxes();
ui->globalPlot->yAxis->scaleRange(1.2,ui->globalPlot->yAxis->range().center());
ui->globalPlot->replot();
});
graphs[row] = graph;
ui->sensors->item(row,col)->setBackgroundColor(color);
} else if (!enable && graphs.at(row) != nullptr){
disconnect(data.at(rowMap[row]),SIGNAL(newValue(double,double)),0,0);
origcols.push_front(graphs.at(row)->pen().color());
ui->globalPlot->removeGraph(graphs.at(row));
graphs[row] = nullptr;
ui->sensors->item(row,col)->setBackgroundColor(Qt::white);
}
示例2: onPacketParsed
void MainWindow::onPacketParsed(Packet packet)
{
_packetsReceivedCount++;
if(!packet.isCrcValid())
{
_crcErrorCount++;
}
QString sourceId = ByteArrayUtils::toString(packet.sourceId()).replace(" 0x", "").replace("0x", "");
if(!_rssValues.contains(sourceId))
{
_rssValues.insert(sourceId, QVector<double>());
_timestampValues.insert(sourceId, QVector<double>());
QCPGraph* deviceGraph = ui->plotWidget->addGraph();
deviceGraph->setScatterStyle(QCP::ssDisc);
deviceGraph->setScatterSize(5);
deviceGraph->setName(sourceId);
ensureDistinctColors();
}
_rssValues[sourceId].append(packet.rss());
_timestampValues[sourceId].append(packet.timestamp().toTime_t());
updatePlot();
updateStatus();
}
示例3: addBaseLine
void ScatterWidget::addBaseLine(const PointD &p1, const PointD &p2, string legend)
{
QCPGraph *graph = NULL;
int nG = ui->scatter->graphCount();
for(int j=0; j<nG; j++)
{
if(ui->scatter->graph(j)->name() == QString::fromStdString(legend))
{
graph = ui->scatter->graph(j);
break;
}
}
if(!graph)
{
graph = ui->scatter->addGraph();
// ----------------------- Scatter Configuration ---------------------------
graph->setName(QString::fromStdString(legend));
QColor color_ = colorManager.getNewDifferentColor();
graph->setPen(QPen(color_));
}
QVector<double> keys, vals;
keys << p1.x << p2.x;
vals << p1.y << p2.y;
graph->setData(keys, vals);
}
示例4: setData
void ScatterWidget::setData(const std::vector<PointD> &data, string legend)
{
QCPGraph *graph = NULL;
int nG = ui->scatter->graphCount();
for(int i=0; i<nG; i++)
{
if(ui->scatter->graph(i)->name() == QString::fromStdString(legend))
{
graph = ui->scatter->graph(i);
break;
}
}
if(!graph)
{
graph = ui->scatter->addGraph();
// ----------------------- Scatter Configuration ---------------------------
graph->setName(QString::fromStdString(legend));
QColor color_ = colorManager.getNewDifferentColor();
graph->setPen(QPen(color_));
graph->setLineStyle(QCPGraph::lsNone);
graph->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssPlusCircle, 4));
ui->scatter->legend->setVisible(true);
}
double min_x = INFINITY, min_y = INFINITY;
double max_x = -INFINITY, max_y = -INFINITY;
QVector<QCPGraphData> q_data(data.size());
for(unsigned int i=0; i<data.size(); i++)
{
q_data[i] = QCPGraphData(data[i].x, data[i].y);
if(ui->recButton->isChecked())
{
vector<double> vec2_double(2);
vec2_double[0] = data[i].x;
vec2_double[1] = data[i].y;
vector<string> vec2_string(2);
vec2_string[0] = legend + "_x";
vec2_string[1] = legend + "_y";
logger.addLogCsv(graph->dataCount(), vec2_string, vec2_double);
}
max_x = qMax(data[i].x, ui->scatter->xAxis->range().upper);
min_x = qMin(data[i].x, ui->scatter->xAxis->range().lower);
max_y = qMax(data[i].y, ui->scatter->yAxis->range().upper);
min_y = qMin(data[i].y, ui->scatter->yAxis->range().lower);
}
graph->data()->set(q_data);
ui->scatter->xAxis->setRange(min_x, max_x);
ui->scatter->yAxis->setRange(min_y, max_y);
ui->scatter->replot();
}
示例5: addPacket
void ScatterWidget::addPacket(const ScatterPacket &packet)
{
QCPGraph *graph = NULL;
int nG = ui->scatter->graphCount();
for(int i=0; i<nG; i++)
{
if(ui->scatter->graph(i)->name() == QString::fromStdString(packet.legend))
{
graph = ui->scatter->graph(i);
break;
}
}
if(!graph)
{
graph = ui->scatter->addGraph();
// ----------------------- Scatter Configuration ---------------------------
graph->setName(QString::fromStdString(packet.legend));
QColor color_ = colorManager.getNewDifferentColor();
graph->setPen(QPen(color_));
graph->setLineStyle(QCPGraph::lsNone);
graph->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssPlusCircle, 4));
ui->scatter->legend->setVisible(true);
}
graph->addData(packet.point.x, packet.point.y);
//if(packet.point.x > ui->scatter->xAxis->max)
double max_x = qMax(packet.point.x, ui->scatter->xAxis->range().upper);
double min_x = qMin(packet.point.x, ui->scatter->xAxis->range().lower);
double max_y = qMax(packet.point.y, ui->scatter->yAxis->range().upper);
double min_y = qMin(packet.point.y, ui->scatter->yAxis->range().lower);
ui->scatter->xAxis->setRange(min_x, max_x);
ui->scatter->yAxis->setRange(min_y, max_y);
if(realTimePlot)
ui->scatter->replot();
else
ui->scatter->replot(QCustomPlot::rpQueuedReplot);
if(ui->recButton->isChecked())
{
vector<double> vec2_double(2);
vec2_double[0] = packet.point.x;
vec2_double[1] = packet.point.y;
vector<string> vec2_string(2);
vec2_string[0] = packet.legend + "_x";
vec2_string[1] = packet.legend + "_y";
logger.addLogCsv(graph->dataCount(), vec2_string, vec2_double);
}
}
示例6: createGraph
QCPGraph* SensorDashboard::createGraph(const QString& name, const QColor& color)
{
QPen pen;
pen.setBrush(color);
QCPGraph *graph = mPlot->addGraph();
graph->setName(name);
graph->setLineStyle(QCPGraph::lsLine);
graph->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssNone));
graph->setPen(pen);
return graph;
}
示例7: updateDetails
void DataExplorer::updateDetails() {
//qDebug() << "SELECT!";
ui->runPlot->clearPlottables();
QVector<QString> labels;
QVector<double> ticks;
int colid = 0;
switch (ui->detailType->currentIndex()) {
case 0:
ui->runPlot->xAxis->setAutoTicks(true);
ui->runPlot->xAxis->setAutoTickLabels(true);
for (QCPAbstractPlottable *p : ui->selectEnvironment->selectedPlottables()) {
int unitid = p->property("UID").toInt();
int envid = p->property("EID").toInt();
DataSeries v = exp->runs.keys().at(envid)->run(unitid,ui->runNo->value(),exp);
QCPGraph *g = ui->runPlot->addGraph();
g->setName(v.descriptor->name()+" @ "+exp->runs.keys().at(envid)->label);
g->setProperty("Unit",v.descriptor->unit());
g->setPen(origcols[colid++%origcols.size()]);
g->setData(v.getTimestamps(),v.getValues());
}
break;
case 1:
for (QCPAbstractPlottable *p : ui->selectEnvironment->selectedPlottables()) {
int unitid = p->property("UID").toInt();
int envid = p->property("EID").toInt();
StatisticalSet vals = exp->runs.keys().at(envid)->integral(unitid,exp);
QCPStatisticalBox* b = new QCPStatisticalBox(ui->runPlot->xAxis,ui->runPlot->yAxis);
b->setData(colid,vals.min(),vals.quantile(0.25),vals.median(),vals.quantile(0.75),vals.max());
b->setProperty("StdDev",vals.getStdDev());
b->setProperty("avg",vals.avg());
b->setProperty("avgTime",vals.avgTime());
qWarning() << exp->data.at(unitid)->descriptor->name() << exp->runs.keys().at(envid)->label << vals.avg() << vals.avgTime() << vals.getStdDev();
ui->runPlot->addPlottable(b);
labels.append(QString("%1 @ %2").arg(exp->data.at(unitid)->descriptor->name(),exp->runs.keys().at(envid)->label));
ticks.append(colid++);
ui->runPlot->xAxis->setAutoTicks(false);
ui->runPlot->xAxis->setAutoTickLabels(false);
ui->runPlot->xAxis->setSubTickCount(0);
ui->runPlot->xAxis->setTickLength(0, 4);
ui->runPlot->xAxis->setTickLabelRotation(90);
ui->runPlot->xAxis->setTickVector(ticks);
ui->runPlot->xAxis->setTickVectorLabels(labels);
}
break;
case 2: break;
}
ui->runPlot->rescaleAxes();
if (ui->axisFromZero->isChecked())
ui->runPlot->yAxis->setRangeLower(0);
ui->runPlot->replot();
}
示例8: drawTSNGraph
void SCTPGraphDialog::drawTSNGraph()
{
GList *listTSN = NULL,*tlist;
tsn_t *tsn;
guint8 type;
guint32 tsnumber=0;
if (direction == 1) {
listTSN = g_list_last(selected_assoc->tsn1);
} else {
listTSN = g_list_last(selected_assoc->tsn2);
}
while (listTSN) {
tsn = (tsn_t*) (listTSN->data);
tlist = g_list_first(tsn->tsns);
while (tlist)
{
type = ((struct chunk_header *)tlist->data)->type;
if (type == SCTP_DATA_CHUNK_ID || type == SCTP_I_DATA_CHUNK_ID || type == SCTP_FORWARD_TSN_CHUNK_ID) {
tsnumber = g_ntohl(((struct data_chunk_header *)tlist->data)->tsn);
yt.append(tsnumber);
xt.append(tsn->secs + tsn->usecs/1000000.0);
ft.append(tsn->frame_number);
}
tlist = g_list_next(tlist);
}
listTSN = g_list_previous(listTSN);
}
QCPScatterStyle myScatter;
myScatter.setShape(QCPScatterStyle::ssCircle);
myScatter.setSize(3);
int graphcount = ui->sctpPlot->graphCount();
// create graph and assign data to it:
// Add TSN graph
if (xt.size() > 0) {
QCPGraph *gr = ui->sctpPlot->addGraph();
gr->setName(QString("TSN"));
myScatter.setPen(QPen(Qt::black));
myScatter.setBrush(Qt::black);
ui->sctpPlot->graph(graphcount)->setScatterStyle(myScatter);
ui->sctpPlot->graph(graphcount)->setLineStyle(QCPGraph::lsNone);
ui->sctpPlot->graph(graphcount)->setData(xt, yt);
typeStrings.insert(graphcount, QString(tr("TSN")));
}
}
示例9: addBodePlot
void BodeWidget::addBodePlot(BodeData *data, const QString& name){
QCPGraph* dbGraph = dbPlot->addGraph();
QCPGraph* paGraph = paPlot->addGraph();
dbGraph->setData(data->at(0), data->at(1));
paGraph->setData(data->at(0), data->at(2));
dbGraph->setName(name);
paGraph->setName(name);
dbGraph->setPen(QPen(QColor::fromHsv(hue, 255, 255, 192)));
paGraph->setPen(QPen(QColor::fromHsv(hue, 255, 255, 192)));
paGraph->setVisible(false);
dbGraph->rescaleAxes();
paGraph->rescaleAxes();
hue += 17;
hue %= 360;
this->paGraphMap[dbGraph] = paGraph;
}
示例10: updateChannel
void RealTimePlot::updateChannel(int index)
{
Channel *chan = channels[index];
// Get parameters from channel
QCPGraph *line = chan->getPtrGraphLine();
QCPGraph *marker = chan->getPtrGraphMarker();
QColor color = chan->getGraphColor();
// Set parameters of line graph
line->setPen(QPen(color));
line->setLineStyle(QCPGraph::lsLine);
line->setVisible(chan->getVisible(LINE));
// Set parameters of marker graph
marker->setName(chan->getName());
marker->setPen(QPen(color));
marker->setLineStyle(QCPGraph::lsNone);
marker->setScatterStyle(chan->getMarkerStyle());
marker->setVisible(chan->getVisible(MARKER));
}
示例11: drawArwndGraph
void SCTPGraphArwndDialog::drawArwndGraph()
{
GList *listSACK = NULL, *tlist;
struct sack_chunk_header *sack_header;
struct nr_sack_chunk_header *nr_sack_header;
tsn_t *tsn;
guint8 type;
guint32 arwnd=0;
if (direction == 1) {
listSACK = g_list_last(selected_assoc->sack1);
startArwnd = selected_assoc->arwnd1;
} else {
listSACK = g_list_last(selected_assoc->sack2);
startArwnd = selected_assoc->arwnd2;
}
while (listSACK) {
tsn = (tsn_t*) (listSACK->data);
tlist = g_list_first(tsn->tsns);
while (tlist) {
type = ((struct chunk_header *)tlist->data)->type;
if (type == SCTP_SACK_CHUNK_ID) {
sack_header =(struct sack_chunk_header *)tlist->data;
arwnd = g_ntohl(sack_header->a_rwnd);
} else if (type == SCTP_NR_SACK_CHUNK_ID) {
nr_sack_header =(struct nr_sack_chunk_header *)tlist->data;
arwnd = g_ntohl(nr_sack_header->a_rwnd);
}
ya.append(arwnd);
xa.append(tsn->secs + tsn->usecs/1000000.0);
fa.append(tsn->frame_number);
tlist = g_list_next(tlist);
}
listSACK = g_list_previous(listSACK);
}
QCPScatterStyle myScatter;
myScatter.setShape(QCPScatterStyle::ssCircle);
myScatter.setSize(3);
// create graph and assign data to it:
// Add Arwnd graph
if (xa.size() > 0) {
QCPGraph *gr = ui->sctpPlot->addGraph(ui->sctpPlot->xAxis, ui->sctpPlot->yAxis);
gr->setName(QString(tr("Arwnd")));
myScatter.setPen(QPen(Qt::red));
myScatter.setBrush(Qt::red);
ui->sctpPlot->graph(0)->setScatterStyle(myScatter);
ui->sctpPlot->graph(0)->setLineStyle(QCPGraph::lsNone);
ui->sctpPlot->graph(0)->setData(xa, ya);
}
ui->sctpPlot->xAxis->setLabel(tr("time [secs]"));
ui->sctpPlot->yAxis->setLabel(tr("Advertised Receiver Window [Bytes]"));
// set axes ranges, so we see all data:
QCPRange myXArwndRange(0, (selected_assoc->max_secs+1));
// QCPRange myXArwndRange(0, 1);
QCPRange myYArwndRange(0, startArwnd);
ui->sctpPlot->xAxis->setRange(myXArwndRange);
ui->sctpPlot->yAxis->setRange(myYArwndRange);
}
示例12: mkSensorModel
void Dialog::mkSensorModel()
{
QCPGraph * gr;
QPen pn;
double simTime = 60.0;
double simStepTime = 0.1;
double tempStart = 25.0;
double tempCurrent = tempStart;
double tempSet = 35.0;
double tempDeltaPrev = 0.0;
int normalFixDeep = 5;
int steps = simTime / simStepTime;
QVector<double> xTime(steps), yTemp(steps), yTempSet(steps);
QVector<double> normalValues(normalFixDeep);
normalValues.fill(0);
QVector<double> tempLabels;
for (int x=10; x<=50; x+=5) tempLabels.push_back(x);
QVector<double> timeLabels;
for (int x=0; x<=simTime; x+=5) timeLabels.push_back(x);
for (int x=0; x<steps; x++)
{
// Calc new temp value
double tempApply = 0.0; // No change
double tempDelta = std::abs(tempCurrent - tempSet);
double stepDir = (tempCurrent < tempSet) ? 1.0 : -1.0;
if (0.1 < tempDelta)
{
if (tempDelta > 10)
{
tempApply = 0.19 * 1.0;
} else {
tempApply = 0.2 * (1.0 * (tempDelta/10.0) );
}
// if (tempApply < 0.01) tempApply = 0.01;
// qDebug() << tempApply;
tempApply = tempApply * stepDir;
// Calc normalzied value
double lastSum = 0;
for (int x=0; x<normalFixDeep; x++) lastSum += normalValues[x];
tempApply = (lastSum + tempApply) / ((double)normalFixDeep + 1.0);
tempDeltaPrev = tempApply;
tempCurrent = tempCurrent + tempApply;
qDebug() << tempCurrent;
}
normalValues.push_back(tempApply);
normalValues.pop_front();
xTime[x] = (double)x * simStepTime;
if (10.0 == xTime[x]) tempSet = 40.0;
if (40.0 == xTime[x]) tempSet = 30.0;
yTempSet[x] = tempSet;
yTemp[x] = tempCurrent;
}
gr = ui->plot->addGraph();
gr->setData(xTime, yTemp);
pn.setColor(Qt::red);
pn.setWidth(3);
gr->setPen(pn);
gr->setName("Реальное значение");
gr = ui->plot->addGraph();
gr->setData(xTime, yTempSet);
pn.setColor(0x008080);
pn.setWidth(1);
pn.setStyle(Qt::DashLine);
gr->setPen(pn);
gr->setName("Конечное значение");
ui->plot->xAxis->setLabel("Время, сек");
ui->plot->xAxis->setRange(0, simTime);
ui->plot->xAxis->setAutoTicks(false);
ui->plot->xAxis->setTickVector(timeLabels);
ui->plot->yAxis->setLabel("Температура, °C");
ui->plot->yAxis->setRange(20, 50);
ui->plot->yAxis->setAutoTicks(false);
ui->plot->yAxis->setTickVector(tempLabels);
ui->plot->legend->setVisible(true);
//.........这里部分代码省略.........
示例13: mkGraph
void Dialog::mkGraph()
{
QCPGraph * gr;
QPen pn;
QVector<double> timeLabels, tempLabels, drosselLabels;
for (int x=0; x<mdl.simTime; x+=10) timeLabels.push_back(x);
for (int x=0; x<=80; x+=5) tempLabels.push_back(x);
for (int x=0; x<=120; x+=10) drosselLabels.push_back(x);
gr = ui->plot->addGraph();
gr->setData(mdl.xTime, mdl.yTempOutput);
pn.setColor(Qt::red);
pn.setWidth(3);
gr->setPen(pn);
gr->setName("Реальное значение, °C");
gr = ui->plot->addGraph();
gr->setData(mdl.xTime, mdl.yTempSet);
pn.setColor(0x0000FF);
pn.setWidth(2);
pn.setStyle(Qt::DotLine);
gr->setPen(pn);
gr->setName("Конечное значение, °C");
gr = ui->plot->addGraph();
gr->setData(mdl.xTime, mdl.yTempCurrent);
pn.setColor(0x808000);
pn.setWidth(2);
pn.setStyle(Qt::SolidLine);
gr->setPen(pn);
gr->setName("Желаемая температура, °C");
gr = ui->plot->addGraph(0, ui->plot->yAxis2);
gr->setData(mdl.xTime, mdl.yServoPos);
pn.setColor(0x006600);
pn.setWidth(2);
pn.setStyle(Qt::DotLine);
gr->setPen(pn);
gr->setName("Дроссель, %");
gr = ui->plot->addGraph(0, ui->plot->yAxis2);
gr->setData(mdl.xTime, mdl.yPressure);
pn.setColor(0x800080);
pn.setWidth(2);
pn.setStyle(Qt::SolidLine);
gr->setPen(pn);
gr->setName("Сила нагрева, %");
ui->plot->xAxis->setLabel("Время, сек");
ui->plot->xAxis->setRange(0, mdl.simTime);
ui->plot->xAxis->setAutoTicks(false);
ui->plot->xAxis->setTickVector(timeLabels);
//ui->plot->xAxis->setAutoTickCount(15);
ui->plot->xAxis->setSubTickCount(10);
ui->plot->yAxis->setLabel("Температура, °C");
ui->plot->yAxis->setRange(20, 80);
ui->plot->yAxis->setAutoTicks(false);
ui->plot->yAxis->setTickVector(tempLabels);
ui->plot->yAxis->setSubTickCount(5);
ui->plot->yAxis2->setLabel("Параметры, %");
ui->plot->yAxis2->setRange(0, 150);
ui->plot->yAxis2->setVisible(true);
ui->plot->yAxis2->setAutoTicks(false);
ui->plot->yAxis2->setTickVector(drosselLabels);
ui->plot->axisRect()->insetLayout()->setInsetAlignment(0, Qt::AlignLeft|Qt::AlignTop);
ui->plot->legend->setVisible(true);
mdl.reset();
mdl.tempCurrent = 40;
mdl.pressureCoef = 1.0;
repaintGraph("ideal");
/*
mdl.reset();
mdl.simTime = 180;
mdl.tempCurrent = 35;
mdl.pressureCoef = 1.2;
mdl.paramsChanged.push_back(ParamChange(20.0, 0, 40));
repaintGraph("hotrun");
mdl.reset();
mdl.tempCurrent = 35;
mdl.pressureCoef = 1.2;
mdl.paramsChanged.push_back(ParamChange(20.0, 0, 30));
repaintGraph("hotrun-low");
// return;
mdl.reset();
mdl.tempCurrent = 45;
mdl.pressureCoef = 0.5;
mdl.paramsChanged.push_back(ParamChange(20.0, 0, 40));
mdl.paramsChanged.push_back(ParamChange(30.0, 1.2, 0));
repaintGraph("plow-hi");
mdl.reset();
mdl.tempCurrent = 45;
mdl.pressureCoef = 0.5;
//.........这里部分代码省略.........
示例14: drawSACKGraph
void SCTPGraphDialog::drawSACKGraph()
{
GList *listSACK = NULL, *tlist;
guint16 gap_start=0, gap_end=0, nr, dup_nr;
struct sack_chunk_header *sack_header;
struct gaps *gap;
tsn_t *tsn;
guint8 type;
guint32 tsnumber=0;
guint32 minTSN;
guint32 *dup_list;
int i, j;
if (direction == 1) {
minTSN = selected_assoc->min_tsn1;
listSACK = g_list_last(selected_assoc->sack1);
} else {
minTSN = selected_assoc->min_tsn2;
listSACK = g_list_last(selected_assoc->sack2);
}
while (listSACK) {
tsn = (tsn_t*) (listSACK->data);
tlist = g_list_first(tsn->tsns);
while (tlist) {
type = ((struct chunk_header *)tlist->data)->type;
if (type == SCTP_SACK_CHUNK_ID) {
gIsSackChunkPresent = 1;
sack_header =(struct sack_chunk_header *)tlist->data;
nr=g_ntohs(sack_header->nr_of_gaps);
tsnumber = g_ntohl(sack_header->cum_tsn_ack);
dup_nr=g_ntohs(sack_header->nr_of_dups);
if (nr>0) { // Gap Reports green
gap = &sack_header->gaps[0];
for(i=0;i<nr; i++) {
gap_start=g_ntohs(gap->start);
gap_end = g_ntohs(gap->end);
for (j=gap_start; j<=gap_end; j++) {
yg.append(j+tsnumber);
xg.append(tsn->secs + tsn->usecs/1000000.0);
fg.append(tsn->frame_number);
}
if (i < nr-1)
gap++;
}
}
if (tsnumber>=minTSN) { // CumTSNAck red
ys.append(tsnumber);
xs.append(tsn->secs + tsn->usecs/1000000.0);
fs.append(tsn->frame_number);
}
if (dup_nr > 0) { // Duplicates cyan
dup_list = &sack_header->a_rwnd + 2 + nr;
for (i = 0; i < dup_nr; i++) {
tsnumber = g_ntohl(dup_list[i]);
if (tsnumber >= minTSN) {
yd.append(tsnumber);
xd.append(tsn->secs + tsn->usecs/1000000.0);
fd.append(tsn->frame_number);
}
}
}
}
tlist = g_list_next(tlist);
}
listSACK = g_list_previous(listSACK);
}
QCPScatterStyle myScatter;
myScatter.setShape(QCPScatterStyle::ssCircle);
myScatter.setSize(3);
int graphcount = ui->sctpPlot->graphCount();
// create graph and assign data to it:
// Add SACK graph
if (xs.size() > 0) {
QCPGraph *gr = ui->sctpPlot->addGraph();
gr->setName(QString("SACK"));
myScatter.setPen(QPen(Qt::red));
myScatter.setBrush(Qt::red);
ui->sctpPlot->graph(graphcount)->setScatterStyle(myScatter);
ui->sctpPlot->graph(graphcount)->setLineStyle(QCPGraph::lsNone);
ui->sctpPlot->graph(graphcount)->setData(xs, ys);
typeStrings.insert(graphcount, QString(tr("CumTSNAck")));
graphcount++;
}
// Add Gap Acks
if (xg.size() > 0) {
QCPGraph *gr = ui->sctpPlot->addGraph();
gr->setName(QString("GAP"));
myScatter.setPen(QPen(Qt::green));
myScatter.setBrush(Qt::green);
ui->sctpPlot->graph(graphcount)->setScatterStyle(myScatter);
ui->sctpPlot->graph(graphcount)->setLineStyle(QCPGraph::lsNone);
ui->sctpPlot->graph(graphcount)->setData(xg, yg);
typeStrings.insert(graphcount, QString(tr("Gap Ack")));
graphcount++;
}
//.........这里部分代码省略.........
示例15: WiresharkDialog
Iax2AnalysisDialog::Iax2AnalysisDialog(QWidget &parent, CaptureFile &cf) :
WiresharkDialog(parent, cf),
ui(new Ui::Iax2AnalysisDialog),
port_src_fwd_(0),
port_dst_fwd_(0),
port_src_rev_(0),
port_dst_rev_(0)
{
ui->setupUi(this);
setWindowSubtitle(tr("IAX2 Stream Analysis"));
// XXX Use recent settings instead
resize(parent.width() * 4 / 5, parent.height() * 4 / 5);
ui->progressFrame->hide();
stream_ctx_menu_.addAction(ui->actionGoToPacket);
stream_ctx_menu_.addAction(ui->actionNextProblem);
stream_ctx_menu_.addSeparator();
stream_ctx_menu_.addAction(ui->actionSaveAudio);
stream_ctx_menu_.addAction(ui->actionSaveForwardAudio);
stream_ctx_menu_.addAction(ui->actionSaveReverseAudio);
stream_ctx_menu_.addSeparator();
stream_ctx_menu_.addAction(ui->actionSaveCsv);
stream_ctx_menu_.addAction(ui->actionSaveForwardCsv);
stream_ctx_menu_.addAction(ui->actionSaveReverseCsv);
stream_ctx_menu_.addSeparator();
stream_ctx_menu_.addAction(ui->actionSaveGraph);
ui->forwardTreeWidget->installEventFilter(this);
ui->forwardTreeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->forwardTreeWidget, SIGNAL(customContextMenuRequested(QPoint)),
SLOT(showStreamMenu(QPoint)));
ui->reverseTreeWidget->installEventFilter(this);
ui->reverseTreeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->reverseTreeWidget, SIGNAL(customContextMenuRequested(QPoint)),
SLOT(showStreamMenu(QPoint)));
connect(ui->streamGraph, SIGNAL(mousePress(QMouseEvent*)),
this, SLOT(graphClicked(QMouseEvent*)));
graph_ctx_menu_.addAction(ui->actionSaveGraph);
QStringList header_labels;
for (int i = 0; i < ui->forwardTreeWidget->columnCount(); i++) {
header_labels << ui->forwardTreeWidget->headerItem()->text(i);
}
ui->reverseTreeWidget->setHeaderLabels(header_labels);
memset(&src_fwd_, 0, sizeof(address));
memset(&dst_fwd_, 0, sizeof(address));
memset(&src_rev_, 0, sizeof(address));
memset(&dst_rev_, 0, sizeof(address));
QList<QCheckBox *> graph_cbs = QList<QCheckBox *>()
<< ui->fJitterCheckBox << ui->fDiffCheckBox
<< ui->rJitterCheckBox << ui->rDiffCheckBox;
for (int i = 0; i < num_graphs_; i++) {
QCPGraph *graph = ui->streamGraph->addGraph();
graph->setPen(QPen(ColorUtils::graph_colors_[i]));
graph->setName(graph_cbs[i]->text());
graphs_ << graph;
graph_cbs[i]->setChecked(true);
graph_cbs[i]->setIcon(StockIcon::colorIcon(ColorUtils::graph_colors_[i], QPalette::Text));
}
ui->streamGraph->xAxis->setLabel("Arrival Time");
ui->streamGraph->yAxis->setLabel("Value (ms)");
// We keep our temp files open for the lifetime of the dialog. The GTK+
// UI opens and closes at various points.
QString tempname = QString("%1/wireshark_iax2_f").arg(QDir::tempPath());
fwd_tempfile_ = new QTemporaryFile(tempname, this);
fwd_tempfile_->open();
tempname = QString("%1/wireshark_iax2_r").arg(QDir::tempPath());
rev_tempfile_ = new QTemporaryFile(tempname, this);
rev_tempfile_->open();
if (fwd_tempfile_->error() != QFile::NoError || rev_tempfile_->error() != QFile::NoError) {
err_str_ = tr("Unable to save RTP data.");
ui->actionSaveAudio->setEnabled(false);
ui->actionSaveForwardAudio->setEnabled(false);
ui->actionSaveReverseAudio->setEnabled(false);
}
QMenu *save_menu = new QMenu();
save_menu->addAction(ui->actionSaveAudio);
save_menu->addAction(ui->actionSaveForwardAudio);
save_menu->addAction(ui->actionSaveReverseAudio);
save_menu->addSeparator();
save_menu->addAction(ui->actionSaveCsv);
save_menu->addAction(ui->actionSaveForwardCsv);
save_menu->addAction(ui->actionSaveReverseCsv);
save_menu->addSeparator();
save_menu->addAction(ui->actionSaveGraph);
ui->buttonBox->button(QDialogButtonBox::Save)->setMenu(save_menu);
const gchar *filter_text = "iax2 && (ip || ipv6)";
dfilter_t *sfcode;
gchar *err_msg;
if (!dfilter_compile(filter_text, &sfcode, &err_msg)) {
QMessageBox::warning(this, tr("No IAX2 packets found"), QString("%1").arg(err_msg));
//.........这里部分代码省略.........