gpt4 book ai didi

QWT:重新绘制而不删除以前的点

转载 作者:行者123 更新时间:2023-12-04 05:47:59 28 4
gpt4 key购买 nike

我正在使用 QWT 6,我试图每秒绘制一些点。为此,我使用以下代码:

d_plot_dots->setRawSamples(_realDataPoints, _imagDataPoints, size);
plot->replot();

我想支持保留选项,因此前几秒的点在绘图中仍然可见。对此的一种解决方案是每秒调整保存点的数组的大小,附加新值并再次调用 setRawSamples()replot() ,但此解决方案的内存效率不高,因为我必须每秒存储至少 2 * 2048 个点。

有什么更有效的方法吗?
提前致谢!

最佳答案

解决方案是使用 directPainter。
按照 QWT 的实时示例,我执行了以下操作:

首先,我创建了帮助类 CurveData。

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 replace(double *x, double *y, int size)
{
if(d_samples.size() != size){
d_samples.resize(size);
}
for(int i = 0; i < size; i++){
d_samples.replace(i, QPointF(x[i], y[i]));
}
}


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

然后在我的绘图代码中:
void
PlottingClass::plotHoldOnPoints(int size)
{
CurveData *data = static_cast<CurveData *>( d_curve->data() );
data->replace(_realDataPoints, _imagDataPoints, size);
d_direct_painter->drawSeries(d_curve, 0, data->size() -1);
}

并且具有最小内存消耗的保持效果已准备就绪!

关于QWT:重新绘制而不删除以前的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10430255/

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