将 qwtPlotZoomer 选择限制为 canvas 个边界
limit qwtPlotZoomer selection to canvas boundaries
qwtPlotZoomer
的默认行为似乎是您可以 select 一个超出轴比例边界和 canvas 大小的矩形,如 realtime
示例:
我想限制 selection 的边缘等于 canvas 或 zoomRect
边界。有什么简单的方法可以做到这一点吗?
编辑:
根据 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);
}
您可以重载 move() 方法并将位置绑定到 canvas 的 contentsRect() 那里(或者更好地使用 pickArea - 通常是相同的)。
qwtPlotZoomer
的默认行为似乎是您可以 select 一个超出轴比例边界和 canvas 大小的矩形,如 realtime
示例:
我想限制 selection 的边缘等于 canvas 或 zoomRect
边界。有什么简单的方法可以做到这一点吗?
编辑:
根据 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);
}
您可以重载 move() 方法并将位置绑定到 canvas 的 contentsRect() 那里(或者更好地使用 pickArea - 通常是相同的)。