我有一个QCustomPlot,用于绘制输入数据。这些情节看起来很棒,但是当我调整窗口大小或突然缩放或拖动数据时,数据会被错误地绘制出来,就像我从画家下面拖出画布一样。
为什么会这样?我将尝试在我的绘图槽中添加一个条件来检测拖动是否正在发生并阻止绘图,但我希望我没有必要。
如果QCustomPlot有键和值,为什么不能在重绘时正确定位它们,无论图的大小如何调整?
答案 0 :(得分:0)
我有类似的问题。我解决了它创建一个插槽" onBeforeReplot()"它连接到QQCustomPlot的Signal" beforeReplot()"。 在插槽中,首先我获得QCustomPlot的指针:
QCustomPlot *plot = dynamic_cast<QCustomPlot*>(QObject::sender() );
如果指针不是NULL,则发件人是有效的QCustomPlot,您可以例如写一些像这样的代码:
plot->xAxis->setRange( computeValidRangeX( plot->xAxis->range() ) );
plot->yAxis->setRange( computeValidRangeY( plot->xAxis->range() ) );
确保范围有效。方法&#34; computeValidRange *&#34;确保当前范围为输入并给出有效范围。在其中,您可以设置最小值或最大值以及范围的最小范围。
答案 1 :(得分:0)
这最终不是真正的QCustomPlot问题,这就是为什么一开始并不明显。 在我的程序中,我收到的是实时数据。数据在我的添加数据/重绘函数中加上时间戳。由于replots排队,当我拖动并调整大小时,它会导致延迟我的添加数据/重新绘制函数被调用,从而丢弃时间戳。
我通过解析数据后立即创建时间戳来修复此问题,该数据由不同的类管理。然后我将时间戳传递给我的添加数据/重绘函数。
因此,如果您使用的是实时数据,请尽可能早地在程序中记下时间戳,并且不要将其置于可能会延迟或排在其他线程后面的函数中。