#include "graphic_analysis_stat.h" #include "graphic_analysis.h" #include "ui_graphic_analysis_stat.h" #include #include GraphicAnalysisStatistics::GraphicAnalysisStatistics(QWidget * parent): QDialog(parent) { ui = new Ui::GraphicAnalysisStatistics(); ui->setupUi(this); int fh = qMax(fontMetrics().height(), 22); QSize sz(fh * 2.5, fh); ui->comboGraphic->setIconSize(sz); } GraphicAnalysisStatistics::~GraphicAnalysisStatistics() { delete ui; } void GraphicAnalysisStatistics::show(GraphicAnalysis * g, GraphicRanges::Range r) { source = g; range = r; if (range.isEmpty()) range = source->rangeAll(); ui->comboGraphic->clear(); for (int i = 0; i < source->graphicsCount(); ++i) { auto g = source->graphic(i); ui->comboGraphic->addItem(g.icon, g.name); } QDialog::exec(); } void GraphicAnalysisStatistics::changeEvent(QEvent * e) { QDialog::changeEvent(e); if (e->type() == QEvent::LanguageChange) { ui->retranslateUi(this); return; } } void GraphicAnalysisStatistics::on_comboGraphic_currentIndexChanged(int index) { if (index < 0 || !source) return; auto setNum = [](double v, QLineEdit * le) { le->setText(QString::number(v)); }; const auto data = source->graphicData(index); QPolygonF in; for (const auto & i: data) { if ((i.x() >= range.start) && (i.x() <= range.end)) in << i; } auto br = in.boundingRect(); setNum(br.left(), ui->lineXMin); setNum(br.right(), ui->lineXMax); setNum(br.top(), ui->lineYMin); setNum(br.bottom(), ui->lineYMax); setNum(in.size(), ui->linePoints); PIVector stat_in; in.reserve(256); for (const auto & i: in) stat_in << i.y(); PIStatisticd stat; stat.calculate(stat_in); setNum(stat.mean, ui->lineMean); setNum(stat.variance, ui->lineVariance); setNum(stat.skewness, ui->lineSkewness); setNum(stat.kurtosis, ui->lineKurtosis); }