qwtplot:重绘时没有情节更新
qwtplot: no plot update on replot
我使用的是基于qwtplot的绘图类,代码可以在这里查看:
https://github.com/pospiech/code/tree/master/libdev/plot/plottools/trunk/src
这段代码在另一个应用程序中使用,这里我创建qwtplot 类 (QMatrixPlot) 并添加数据并调用replot
plot2DAmplitude->setMatrixData(QVector<double>::fromStdVector(dataAmplitude),
xaxis.size(),
QwtInterval(xaxis.front(), xaxis.back()),
QwtInterval(yaxis.front(), yaxis.back()));
plot2DAmplitude->replot();
setMatrixData
是下面的代码:
void setMatrixData(const QVector< double > &values, int numColumns, QwtInterval xAxisRange, QwtInterval yAxisRange)
{
m_MatrixRasterData->setInterval( Qt::XAxis, xAxisRange );
m_MatrixRasterData->setInterval( Qt::YAxis, yAxisRange );
double minValue = *std::min_element( std::begin(values), std::end(values) );
double maxValue = *std::max_element( std::begin(values), std::end(values) );
m_MatrixRasterData->setInterval( Qt::ZAxis, QwtInterval(minValue, maxValue) );
m_MatrixRasterData->setValueMatrix (values, numColumns);
d_spectrogram->setData( m_MatrixRasterData );
const QwtInterval zInterval = d_spectrogram->data()->interval( Qt::ZAxis );
setAxisScale( QwtPlot::yRight, zInterval.minValue(), zInterval.maxValue() );
QwtScaleWidget *axis = axisWidget( QwtPlot::yRight );
axis->setColorMap( zInterval, QColorMap::map(d_mapType) );
}
这有效 - 一次。
尽管调用了相同的代码,但使用不同数据的第二次调用什么也不做。只有当我放大和缩小时,数据才会更新。
有什么想法吗? Qwt 是 6.1.3 版本。一旦我完成了一个最小的例子,我将更新这个 post。
QwtPlotRasterItem 缓存渲染图像。在您的代码中,您正在更改项目背后的数据,因此该项目不知道缓存无效。
使用 QwtPlotRasterItem::invalidateCache() 你可以解决这样的问题。
我使用的是基于qwtplot的绘图类,代码可以在这里查看: https://github.com/pospiech/code/tree/master/libdev/plot/plottools/trunk/src
这段代码在另一个应用程序中使用,这里我创建qwtplot 类 (QMatrixPlot) 并添加数据并调用replot
plot2DAmplitude->setMatrixData(QVector<double>::fromStdVector(dataAmplitude),
xaxis.size(),
QwtInterval(xaxis.front(), xaxis.back()),
QwtInterval(yaxis.front(), yaxis.back()));
plot2DAmplitude->replot();
setMatrixData
是下面的代码:
void setMatrixData(const QVector< double > &values, int numColumns, QwtInterval xAxisRange, QwtInterval yAxisRange)
{
m_MatrixRasterData->setInterval( Qt::XAxis, xAxisRange );
m_MatrixRasterData->setInterval( Qt::YAxis, yAxisRange );
double minValue = *std::min_element( std::begin(values), std::end(values) );
double maxValue = *std::max_element( std::begin(values), std::end(values) );
m_MatrixRasterData->setInterval( Qt::ZAxis, QwtInterval(minValue, maxValue) );
m_MatrixRasterData->setValueMatrix (values, numColumns);
d_spectrogram->setData( m_MatrixRasterData );
const QwtInterval zInterval = d_spectrogram->data()->interval( Qt::ZAxis );
setAxisScale( QwtPlot::yRight, zInterval.minValue(), zInterval.maxValue() );
QwtScaleWidget *axis = axisWidget( QwtPlot::yRight );
axis->setColorMap( zInterval, QColorMap::map(d_mapType) );
}
这有效 - 一次。 尽管调用了相同的代码,但使用不同数据的第二次调用什么也不做。只有当我放大和缩小时,数据才会更新。
有什么想法吗? Qwt 是 6.1.3 版本。一旦我完成了一个最小的例子,我将更新这个 post。
QwtPlotRasterItem 缓存渲染图像。在您的代码中,您正在更改项目背后的数据,因此该项目不知道缓存无效。
使用 QwtPlotRasterItem::invalidateCache() 你可以解决这样的问题。