Мне нужно печатать двухмерные графики только с помощью инструментов qt. Я не могу использовать qCustomPlot или qwt вместо этого. Я видел библиотеку QChart внутри qt, я использую версию 5.12 qt.
В качестве эталона я использовал динамическое отображение графика, это сработало. Но я должен добавить точки вручную, и когда я делаю это, qchart не реплотирует. Есть ссылка https://doc.qt.io/archives/qt-5.10/qtcharts-dynamicspline-example.html. Я также нашел решение этой проблемы в переполнении стека, но оно не работает для меня. Я сделал update () после добавления точки в qchart, и update () из qchartview тоже не работает. Но если я добавлю точки в конструктор qchart, это сработает. Я также сделал addPoint (double, double) в QSplineSeries, он не реплотирует.
работал (в конструкторе)
{
addSeries(m_series);
m_series->append(m_x, m_y);
m_series->append(m_x + 0.1, m_y + 0.1);
m_series->append(m_x + 0.4, m_y + 0.4);
m_series->append(m_x + 0.6, m_y + 0.1);
}
не сработало (это в другом методе того же класса)
void Chart::addPoint(double _arg, double _func)
{
dataFunct.append(QPointF(_arg,_func));
m_series->clear();
removeSeries(m_series);
//QSplineSeries* spLine = dynamic_cast<QSplineSeries*>(tmpSeria);
*m_series<<dataFunct;
addSeries(m_series);
}
Я хочу, чтобы qchart отображался во время состояния после вставки новой точки графика. Очки рассчитываются в другой функции.
Вот источник моей диаграммы.
#ifndef CHAT_H
#define CHAT_H
#include <QtCharts/QChart>
#include <QtCore/QTimer>
QT_CHARTS_BEGIN_NAMESPACE
class QSplineSeries;
class QValueAxis;
QT_CHARTS_END_NAMESPACE
QT_CHARTS_USE_NAMESPACE
class Chart: public QChart
{
Q_OBJECT
public:
Chart(QGraphicsItem *parent = 0, Qt::WindowFlags wFlags = 0);
virtual ~Chart();
void setPoint(double _arg, double _func);
signals:
void addPointSignal(double,double);
public slots:
void addPoint(double _arg, double _func);
private:
QSplineSeries *m_series;
QStringList m_titles;
QValueAxis *m_axis;
qreal m_step;
qreal m_x;
qreal m_y;
QList<QPointF> dataFunct;
};
#endif // CHAT_H
источник
#include "chart.h"
#include <QtCharts/QAbstractAxis>
#include <QtCharts/QSplineSeries>
#include <QtCharts/QValueAxis>
#include <QtCore/QRandomGenerator>
#include <QtCore/QDebug>
Chart::Chart(QGraphicsItem *parent, Qt::WindowFlags wFlags):
QChart(QChart::ChartTypeCartesian, parent, wFlags),
m_series(0),
m_axis(new QValueAxis),
m_step(0),
m_x(0.0),
m_y(0.0)
{
m_series = new QSplineSeries(this);
QPen red(Qt::red);
red.setWidth(3);
m_series->setPen(red);
addSeries(m_series);
//m_series->append(m_x, m_y);
//m_series->append(m_x + 0.1, m_y + 0.1);
//m_series->append(m_x + 0.4, m_y + 0.4);
//m_series->append(m_x + 0.6, m_y + 0.1);
createDefaultAxes();
setAxisX(m_axis, m_series);
m_axis->setTickCount(5);
axisX()->setRange(-1, 3);
axisY()->setRange(-2, 2);
}
Chart::~Chart()
{
}
void Chart::setPoint(double _arg, double _func)
{
}
void Chart::addPoint(double _arg, double _func)
{
dataFunct.append(QPointF(_arg,_func));
//removeAllSeries();
m_series->clear();
removeSeries(m_series);
//QSplineSeries* spLine = dynamic_cast<QSplineSeries*>(tmpSeria);
*m_series<<dataFunct;
addSeries(m_series);
}