gpt4 book ai didi

c++ - QwtPlot - 设置样本期间的内存访问冲突

转载 作者:太空宇宙 更新时间:2023-11-04 13:52:41 25 4
gpt4 key购买 nike

我在维护曲线指针方面遇到了问题。在设置样本(或将曲线附加到绘图)期间,我遇到了内存访问冲突。它发生在 updateDisplayingData 方法的第 3 次调用中。调试器在 QwtSeriesStore 中的 void QwtSeriesStore::setData( QwtSeriesData *series ) 中捕获异常。下面是更新的 SSCCE 代码:

头文件:

#ifndef PLOT_H
#define PLOT_H

#include <qwt_plot.h>
#include <qwt_legend.h>
#include <qwt_plot_curve.h>

class Plot : public QwtPlot
{
Q_OBJECT

public:
explicit Plot(QWidget *parent = 0);
~Plot();

void updateDisplayingData(std::vector<double> data);

private:
void setUpPlot();
void setUpCurves();
void initialXAxisValues();

std::vector<double> XAxisValues;
std::auto_ptr<QwtLegend> legend;
QwtPlotCurve *aXCurve;
};

#endif // PLOT_H

源文件:

#include "plot.h"

Plot::Plot(QWidget *parent)
: QwtPlot(parent)
{
setUpPlot();
setUpCurves();
}

void Plot::setUpPlot()
{
QwtLegend *legend = new QwtLegend;
legend->setFrameStyle(QFrame::Box|QFrame::Sunken);
this->insertLegend(legend, QwtPlot::BottomLegend);
}

void Plot::setUpCurves()
{
aXCurve = new QwtPlotCurve("Acceleration in X axis");
aXCurve->setStyle(QwtPlotCurve::Lines);
aXCurve->setRenderHint(QwtPlotItem::RenderAntialiased);
aXCurve->setPen(QPen(QColor(150,200,200),2));
}

void Plot::initialXAxisValues()
{
double time = 0;
for(int i=0; i<=600; i++)
{
XAxisValues.push_back(time);
time += 0.1;
qDebug() << XAxisValues[i];
}
}

void Plot::updateDisplayingData(std::vector<double> data)
{
this->detachItems(QwtPlotItem::Rtti_PlotItem, true);
aXCurve->setSamples(QVector<double>::fromStdVector(XAxisValues),QVector<double>::fromStdVector(data));
aXCurve->attach(this);
replot();
}

Plot::~Plot()
{
}

还值得注意的是,当我每次调用更新(下面的示例)方法时初始化曲线时,它都能正常工作(但它不符合项目要求)。

void Plot::updateDisplayingData(std::vector<double> data)
{
this->detachItems(QwtPlotItem::Rtti_PlotItem, true);
QwtPlotCurve *aXCurve1;
aXCurve1 = new QwtPlotCurve("Acceleration in X axis");
aXCurve1->setStyle(QwtPlotCurve::Lines);
aXCurve1->setRenderHint(QwtPlotItem::RenderAntialiased);
aXCurve1->setPen(QPen(QColor(150,150,200),2));

aXCurve1->setSamples(QVector<double>::fromStdVector(XAxisValues),QVector<double>::fromStdVector(data));
aXCurve1->attach(this);
replot();
}

最佳答案

我发现了一个错误。这是在

this->detachItems(QwtPlotItem::Rtti_PlotItem, true);

第二个参数定义分离后自动删除项目。所以值“真”导致我的曲线被删除。当我将其更改为“false”时,一切都开始正常工作。

关于c++ - QwtPlot - 设置样本期间的内存访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22848713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com