QChart не перестраивается динамически - PullRequest
0 голосов
/ 14 мая 2019

Мне нужно печатать двухмерные графики только с помощью инструментов 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);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...