首页 > 解决方案 > 如何从列表中将对象添加到图表中?

问题描述

在负责显示图形的类的函数中,我传递了一个指向对象列表的指针。将对象数据中的坐标组合到 QAreaSeries 和列表 QList 中的框。我想在图表上显示此列表的元素。

标题:

class DevMapViewer : public QGraphicsView
{
    Q_OBJECT
public:
    DevMapViewer(QWidget *parent = nullptr);

signals:
    void deviceId(QString id);
    void readDataFromFile(void);

protected:
    void resizeEvent(QResizeEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    void keyPressEvent(QKeyEvent *event);
    void keyReleaseEvent(QKeyEvent *event);
    void wheelEvent(QWheelEvent *event);

public slots:
    void deviceSetList(QList<AxDevice *> *data);

private:
    void chartZoom(qreal mZoom);

    uint32_t m_devCount = 0;
    QChart *m_chart;
    QChartView *chartView;
    qreal mFactor=1.0;
    Callout *m_tooltip;
    QList<Callout *> m_callouts;
    QList<QAreaSeries *> *m_series;
    QCategoryAxis *axisX;
    QCategoryAxis *axisY;
    QLineSeries *series0;
    QLineSeries *series1;
    QAreaSeries *series;
};

来源:

void DevMapViewer::deviceSetList(QList<AxDevice *> *data)
{
    QList<QAreaSeries *> *m_series = new QList<QAreaSeries *>;
    int i = 0;
    while(i<(data->size())){
        QLineSeries *series0 = new QLineSeries();
        QLineSeries *series1 = new QLineSeries();
        QAreaSeries *series = new QAreaSeries();

        series0->append(data->at(i)->getX0(data->at(i)->chanelNum()),
                        data->at(i)->getY0(data->at(i)->chanelNum()));
        series0->append(data->at(i)->getX1(data->at(i)->chanelNum()),
                        data->at(i)->getY0(data->at(i)->chanelNum()));
        series1->append(data->at(i)->getX0(data->at(i)->chanelNum()),
                        data->at(i)->getY1(data->at(i)->chanelNum()));
        series1->append(data->at(i)->getX1(data->at(i)->chanelNum()),
                        data->at(i)->getY1(data->at(i)->chanelNum()));

        series->setLowerSeries(series0);
        series->setUpperSeries(series1);

        m_series->append(series);
        m_series->at(i)->setName(data->at(i)->deviceId());

        m_chart->addSeries(m_series->at(i));
        m_chart->setAxisX(axisX, m_series->at(i));
        m_chart->setAxisY(axisY, m_series->at(i));

        connect(m_series->at(i), 
                &QAreaSeries::hovered, 
                this, 
                &DevMapViewer::tooltip);
        i++;
    }
}

执行一行时:

m_chart->addSeries(m_series->at(i));

程序因操作系统的分段错误而关闭

Segmentation fault (signal SIGSEGV)

试图传递 QList 对象的指针和副本。

将代码上传到 GitHub

标签: c++qt

解决方案


问题已解决。向尚未创建的图表添加了系列。它变成了:

m_chart = new QChart();
emit readDataFromFile();

它是:

emit readDataFromFile(); m_chart = new QChart();

推荐阅读