我有一个 QCustomPlot 正在绘制传入数据的图形。这些图看起来很棒,但是当我突然调整窗口大小或缩放或拖动数据时,数据会被错误地绘制,就好像我从画家下面拖出画布一样。
为什么会这样?我将尝试在我的绘图槽中添加一个条件,以检测是否正在发生拖动并推迟绘图,但我希望我不必这样做。
如果 QCustomPlot 具有键和值,为什么无论绘图如何调整大小,它都不能在重新绘制期间正确定位它们?
我有一个 QCustomPlot 正在绘制传入数据的图形。这些图看起来很棒,但是当我突然调整窗口大小或缩放或拖动数据时,数据会被错误地绘制,就好像我从画家下面拖出画布一样。
为什么会这样?我将尝试在我的绘图槽中添加一个条件,以检测是否正在发生拖动并推迟绘图,但我希望我不必这样做。
如果 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 问题,这就是为什么它一开始并不明显。在我的程序中,我正在接收实时数据。数据在我的添加数据/重新绘制函数中得到时间戳。由于重新绘制已排队,当我拖动并调整绘图大小时,它会导致我的添加数据/重新绘制函数被调用时出现延迟,从而导致时间戳丢失。
我通过在解析由不同类管理的数据后立即创建时间戳来解决此问题。然后我将时间戳传递给我的添加数据/重新绘制函数。
因此,如果您使用实时数据,请尽可能早地在程序中获取时间戳,并且不要将其放入可能会延迟或在其他线程后面排队的函数中。