gpt4 book ai didi

c++ - Qwt - 重绘不清除当前情节

转载 作者:太空宇宙 更新时间:2023-11-04 11:37:53 24 4
gpt4 key购买 nike

这是我在这里的第一个问题,我相信我还没有看到其他人问过这个具体问题,但我目前正在处理的是一个不想重新绘制的 qwt 图。

我想做什么:调用 replot() 方法来清除我当前的绘图。

我的问题:调用 replot() 时不会清除我当前的绘图,并且我的绘图绘制在彼此之上。

Here is a link to an image of my problem

如图所示,新曲线绘制在现有曲线之上,这就是我要解决的问题。

这是我的一些代码:(如果我遗漏了某些部分,请告诉我)

绘图.cpp

#include "plot.h"
#include <qwt_plot.h>
#include <qwt_plot_grid.h>
#include <qwt_plot_layout.h>
#include <qwt_plot_canvas.h>
#include <qwt_plot_curve.h>
#include <qwt_plot_directpainter.h>
#include <qwt_curve_fitter.h>
#include <qwt_painter.h>

class CurveData: public QwtArraySeriesData<QPointF>
{
public:
CurveData()
{
}

virtual QRectF boundingRect() const
{
if ( d_boundingRect.width() < 0.0 )
d_boundingRect = qwtBoundingRect( *this );

return d_boundingRect;
}

inline void append( const QPointF &point )
{
d_samples += point;
}

void clear()
{
d_samples.clear();
d_samples.squeeze();
d_boundingRect = QRectF( 0.0, 0.0, -1.0, -1.0 );
}
};

Plot::Plot( QWidget *parent ):
QwtPlot( parent )
{
d_directPainter = new QwtPlotDirectPainter(this);

setAutoReplot(false);

setAxisScale(QwtPlot::yLeft, 0.014,0.016);
setAxisScale(QwtPlot::xBottom, 0, 1000);

d_curve = new QwtPlotCurve();
d_curve->setData(new CurveData());

d_curve->attach(this);
}

void Plot::AppendPoint(const QPointF &point)
{
CurveData *data = static_cast<CurveData *>(d_curve->data());
data->append(point);
}

void Plot::DrawCurveSegment()
{
CurveData *data = static_cast<CurveData *>(d_curve->data());

d_directPainter->drawSeries(d_curve, data->size()-11, data->size()-1);
}

void Plot::ClearPlot()
{
CurveData *data = static_cast<CurveData *>(d_curve->data());
data->clear();

QwtPlot::replot();
}

主窗口.cpp

MainWindow::MainWindow(QWidget *parent):
QWidget( parent )
{
d_plot = new Plot();
counter = 0;
loopCounter = 0;

// ... //

}

void MainWindow::timerEvent(QTimerEvent *) {
if (counter>0 && counter%1000==0)
{
d_plot->ClearPlot();
d_plot->replot();
loopCounter++;
qDebug()<<"clear!";
}

for (int ii=0; ii<10;ii++)
{
double y = someArray[counter];
double x = (double)counter-((double)loopCounter*1000);

counter++;
d_plot->AppendPoint(QPointF(x,y));
}
d_plot->DrawCurveSegment();
}

如果有人能看出我做错了什么,将不胜感激。

最好的问候!

最佳答案

我通过将 clearPlot 方法更改为以下方法解决了这个问题:

void Plot::ClearPlot()
{
CurveData *data = static_cast<CurveData *>(d_curve->data());
data->clear();

QwtPlot::replot();
QwtPlot::repaint();
}

关于c++ - Qwt - 重绘不清除当前情节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22459453/

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