将 qwtPlotZoomer 选择限制为画布边界

Posted

技术标签:

【中文标题】将 qwtPlotZoomer 选择限制为画布边界【英文标题】:limit qwtPlotZoomer selection to canvas boundaries 【发布时间】:2015-08-26 17:21:43 【问题描述】:

qwtPlotZoomer 的默认行为似乎是您可以选择一个超出轴刻度边界和画布大小的矩形,如 realtime 示例的此屏幕截图所示:

我想限制选择的边缘等于画布或zoomRectboundaries。有什么简单的方法可以做到这一点?

【问题讨论】:

【参考方案1】:

您可以重载 move() 方法并将位置绑定到画布的 contentsRect() 那里(或者最好使用 pickArea - 通常是相同的)。

【讨论】:

这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post。 @Blackwood 我明白你为什么会这样想,但在这种情况下,答案是我正在寻找的有用指导,足以让我解决问题。【参考方案2】:

编辑:

根据 Uwe 的建议,我重载了 move() 函数,如下所示,这样可以防止选取器的矩形被绘制到屏幕外。

void QZoomer::move(const QPoint& pos)

    // bound the picker selection to the zoom base so you can't zoom off screen
    QPoint boundedPos = pos;

    if (boundedPos.x() > plot()->canvas()->contentsRect().right())  boundedPos.setX(plot()->canvas()->contentsRect().right());
    if (boundedPos.x() < plot()->canvas()->contentsRect().left())   boundedPos.setX(plot()->canvas()->contentsRect().left());
    if (boundedPos.y() < plot()->canvas()->contentsRect().top())    boundedPos.setY(plot()->canvas()->contentsRect().top());
    if (boundedPos.y() > plot()->canvas()->contentsRect().bottom()) boundedPos.setY(plot()->canvas()->contentsRect().bottom());

    QwtPlotPicker::move(boundedPos);

另一种方法是覆盖缩放功能并将rect绑定到zoomBase。这会将实际缩放限制在缩放基础上,但仍会将选取器绘制在线条之外。

void Zoomer::zoom(const QRectF& rect)

    // bound the zooming rect to the zoomBase dimensions
    QRectF boundedRect = rect & zoomBase(); 
    QwtPlotZoomer::zoom(boundedRect);

【讨论】:

以上是关于将 qwtPlotZoomer 选择限制为画布边界的主要内容,如果未能解决你的问题,请参考以下文章

如何限制 QwtPlot 可以缩小到的最大范围?

检测画布元素在画布边界之外

为画布制作边界

防止 Fabric js 对象超出画布边界

将 UIPanGestureRecognizer 快速限制为边界

确定绘制到画布中的形状/图形的边界