首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从列表中将对象添加到图表中?

如何从列表中将对象添加到图表中?
EN

Stack Overflow用户
提问于 2019-08-05 22:40:35
回答 1查看 148关注 0票数 0

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

标题:

代码语言:javascript
复制
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;
};

来源:

代码语言:javascript
复制
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++;
    }
}

执行行时:

代码语言:javascript
复制
m_chart->addSeries(m_series->at(i));

程序以操作系统中的分段错误结束。

代码语言:javascript
复制
Segmentation fault (signal SIGSEGV)

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

上传代码到GitHub

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-13 19:32:42

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

代码语言:javascript
复制
m_chart = new QChart();
emit readDataFromFile();

它是:

代码语言:javascript
复制
emit readDataFromFile(); m_chart = new QChart();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57366854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档