#include "spectrumwindow.h" #include "ui_spectrumwindow.h" #include "mainwindow.h" SpectrumWindow::SpectrumWindow(QWidget *parent) : QDialog(parent), ui(new Ui::SpectrumWindow) { ui->setupUi(this); ui->spectrumPlot->installEventFilter(this); } SpectrumWindow::~SpectrumWindow() { delete ui; } void SpectrumWindow::plotSpectrum(QVector x, QVector y){ //find the maximum and minimum values double y_min = y[0]; double y_max = y[0]; for(int i=1; i y_max) y_max = y[i]; } ui->spectrumPlot->yAxis->setRange(y_min, y_max); ui->spectrumPlot->addGraph(); ui->spectrumPlot->graph(0)->setData(x, y); ui->spectrumPlot->replot(); } void SpectrumWindow::initPlot(double x_min, double x_max, double y_min, double y_max, QString x_title, QString y_title){ // give the axes some labels: ui->spectrumPlot->xAxis->setLabel(x_title); ui->spectrumPlot->yAxis->setLabel(y_title); // set axes ranges, so we see all data: ui->spectrumPlot->xAxis->setRange(x_min, x_max); ui->spectrumPlot->yAxis->setRange(y_min, y_max); ui->spectrumPlot->replot(); } /// Update the image viewing widget so that it always fills the main window void SpectrumWindow::resizeEvent(QResizeEvent* event){ //get the current window size QSize winsize = event->size(); //match the plot to the window ui->spectrumPlot->setFixedSize(winsize.width(), winsize.height()); } bool SpectrumWindow::eventFilter(QObject *target, QEvent *event) { if(target == ui->spectrumPlot && event->type() == QEvent::MouseMove) { QMouseEvent *_mouseEvent = static_cast(event); //get the window position of the click QPoint pixel = _mouseEvent->pos(); //calculate the position of the click in the image double x = ui->spectrumPlot->xAxis->pixelToCoord(pixel.x()); double y = ui->spectrumPlot->yAxis->pixelToCoord(pixel.y()); } else if(target == ui->spectrumPlot && event->type() == QEvent::MouseButtonPress) { QMouseEvent *_mouseEvent = static_cast(event); //get the window position of the click QPoint pixel = _mouseEvent->pos(); //calculate the position of the click in the image double x = ui->spectrumPlot->xAxis->pixelToCoord(pixel.x()); double y = ui->spectrumPlot->yAxis->pixelToCoord(pixel.y()); //tell the parent MainWindow that a point on the spectrum was selected ((MainWindow*)parent())->mousePressSpectrum(x, y); } return false; } /// Update everything associated with when the image is clicked void SpectrumWindow::mousePressEvent(QMouseEvent * event){ //get the window position of the click QPoint winp = event->pos(); //calculate the position of the click in the image QPoint p = winp; //output the image position std::cout<