QCustomPlot 在绘图调整大小期间出现错误

Posted

技术标签:

【中文标题】QCustomPlot 在绘图调整大小期间出现错误【英文标题】:QCustomPlot misplots during plot resize 【发布时间】:2015-09-06 23:34:26 【问题描述】:

我有一个 QCustomPlot 正在绘制传入数据。这些图看起来很棒,但是当我突然调整窗口大小或缩放或拖动数据时,数据会出现错误,就像我从画家下面拖出画布一样。

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

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

【问题讨论】:

【参考方案1】:

我也有类似的问题。我解决了它,创建了一个连接到 QQCustomPlot 的信号“beforeReplot()”的插槽“onBeforeReplot()”。 在 slot 中,首先获取 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*”确实将当前范围作为输入并给出有效范围。您可以在其中设置最小值或最大值以及范围的最小跨度。

【讨论】:

所以在重新绘制之前重置范围解决了点被错误绘制和看起来很紧张的问题,而不是平滑?我只是要求澄清一下,因为这似乎并不明显可以解决问题。今晚试试,谢谢。 也许你应该澄清问题并添加一些图片。现在我不确定它是否有帮助。你试过了吗?【参考方案2】:

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

我通过在解析数据后立即创建时间戳来解决此问题,该数据由不同的类管理。然后我将时间戳传递给我的添加数据/重新绘制函数。

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

【讨论】:

以上是关于QCustomPlot 在绘图调整大小期间出现错误的主要内容,如果未能解决你的问题,请参考以下文章

QTVS2017+QT使用QCustomPlot绘图

QTVS2017+QT使用QCustomPlot绘图

与 Qwt 相比,QCustomPlot 的优点/缺点是啥?

QCustomPlot开发笔记:QCustomPlot简介下载以及基础绘图

QT绘图技术QCustomPlot - 超强超小巧的qt绘图控件

QCustomPlot 海量数据绘图