QCustomPlot 在绘图调整大小时绘制错误

QCustomPlot misplots during plot resize

我有一个 QCustomPlot,它正在绘制传入数据的图形。这些图看起来不错,但是当我调整 window 大小时或突然缩放或拖动时,数据绘制错误,就像我从画家下面拖出一个 canvas 一样。

为什么会这样?我将尝试在我的绘图槽中添加一个条件来检测是否正在发生拖动并推迟绘图,但我希望我不必这样做。

如果 QCustomPlot 有键和值,为什么无论绘图如何调整大小,它都不能在重新绘图期间正确定位它们?

我遇到过类似的问题。我解决了它创建一个连接到 QQCustomPlot 的信号 "beforeReplot()" 的插槽 "onBeforeReplot( )"。 在插槽中,首先我获得了 QCustomPlot 的指针:

QCustomPlot *plot = dynamic_cast<QCustomPlot*>(QObject::sender() );

如果指针不为 NULL,则发送方是有效的 QCustomPlot,您可以例如写一些这样的代码:

plot->xAxis->setRange( computeValidRangeX( plot->xAxis->range() ) );
plot->yAxis->setRange( computeValidRangeY( plot->xAxis->range() ) );

以确保范围有效。 "computeValidRange*" 方法确实将当前范围作为输入并给出了有效范围。您可以在其中设置最小值或最大值以及范围的最小跨度。

这最终不是真正的 QCustomPlot 问题,这就是为什么它一开始并不明显。 在我的程序中,我正在接收实时数据。数据在我的 add data/replot 函数中加了时间戳。由于重新绘图已排队,当我拖动绘图并调整其大小时,它导致我的 add data/replot 函数被调用时出现延迟,从而丢弃了时间戳。

我通过在解析数据后立即创建时间戳来修复此问题,该数据由另一个 class 管理。然后我将时间戳传递给我的添加 data/replot 函数。

因此,如果您使用的是实时数据,请在您的程序中尽早获取时间戳,并且不要将其放在可能会延迟或排在其他线程后面的函数中。