Данные не отображаются на QChart
Хочу иметь собственный, пользовательский класс для создания графиков QChart
.
Идея заключается в том, чтобы в класс через функцию, можно было добавлять данные, а они уже автоматически будут строится
мой код
mainwindow.h
:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include QMainWindow
#include <GraphPlotter.h>
#include QDebug
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
:
#include mainwindow.h
#include ui_mainwindow.h
#include GraphPlotter.h
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
GPlotter gplotter(ui->view);
QVector<double> arr1{6, 7, 8, 9, 10};
QVector<double> arr2{5, 4, 3, 2, 1};
int idOne = gplotter.addData("plot1", arr1);
}
MainWindow::~MainWindow()
{
delete ui;
}
GraphPlotter.h
:
#ifndef GRAPHPLOTTER_H
#define GRAPHPLOTTER_H
#include QChartView
#include QLineSeries
#include QtCharts/QChart
#include QDebug
#include QKeyEvent
#include QWidget
QT_CHARTS_USE_NAMESPACE
class GPlotter : public QChartView
{
Q_OBJECT
public:
explicit GPlotter(QWidget *parent = nullptr);
~GPlotter();
int addData(QString title, QVector <double> &arr);
QChart *chart;
QString title;
QMap<int, QLineSeries*> map;
};
#endif // GRAPHPLOTTER_H
GrarhPlotter.cpp
:
#include "GraphPlotter.h"
#include QValueAxis
#include "ui_mainwindow.h"
GPlotter::GPlotter(QWidget *parent):
QChartView(parent)
{
chart = new QChart();
setChart(chart);
setMouseTracking(true);
}
int GPlotter::addData(QString title, QVector<double> &arr){
QLineSeries *series = new QLineSeries();
series->setName(title);
QValueAxis *axisX = new QValueAxis();
chart->addAxis(axisX, Qt::AlignBottom);
QValueAxis *axisY = new QValueAxis();
chart->addAxis(axisY, Qt::AlignLeft);
for(int i = 0; i < arr.count(); i++)
*series << QPointF(i, arr.at(i));
map.insert(map.count(), series);
chart->addSeries(series);
series->attachAxis(axisX);
series->attachAxis(axisY);
return map.firstKey();
}
void GPlotter::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
{
m_lastPoint = event->pos();
m_isPress = true;
}
}
GPlotter::~GPlotter()
{
}
На выходе получаю это:
данные не отображаются
Ответы (1 шт):
Автор решения: user578677
→ Ссылка
Я понял в чем ошибка была!!! "Внутренности" класса оформлены правильно, просто надо вызывать функцию через форму, вот так:
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "GraphPlotter.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
GPlotter gplotter(ui->view);
QVector<double> arr1{6, 7, 8, 9, 10};
QVector<double> arr2{5, 4, 3, 2, 1};
ui->view->addData("plot1", arr1);
}
MainWindow::~MainWindow()
{
delete ui;
}