qwtplot放大限制

      我对qwtpot放大进行了条件限制,当X坐标轴横坐标最大值-最小值<0.3时不允许再放大,即无论qwtplotzoomer如何框选都不会再放大。

accept函数是qwtplotzoomer中的虚函数,我重新写了一个子类继承自qwtplotzoomer,然后重写了这个虚函数。这个虚函数的作用就是判断qwtplotzoomer框中的矩形框是否符合要求,如果符合要求就将矩形框中的部分进行放大,不符合就不放大。在这个虚函数中可以加入自己的代码,比如不满足某些条件就return false,这时就不会进行放大。

class Zoomer :public QwtPlotZoomer
{
	Q_OBJECT
public:
	QString m_vCurveType;
	Zoomer(QString curveType,QWidget *canvas, bool doReplot = true) :QwtPlotZoomer(canvas, doReplot)
	{
		m_vCurveType = curveType;
	}
protected:
	virtual bool accept(QPolygon & 	pa)	const
	{
		const QwtPlot *plot = QwtPlotPicker::plot();
		if ((m_vCurveType == "0" || m_vCurveType=="1")&&(plot->axisScaleDiv(QwtPlot::xBottom).interval().maxValue() - plot->axisScaleDiv(QwtPlot::xBottom).interval().minValue() < 0.3))
			return FALSE;
		else if (m_vCurveType == "2" && (plot->axisScaleDiv(QwtPlot::yLeft).interval().maxValue() - plot->axisScaleDiv(QwtPlot::yLeft).interval().minValue() < 15))
			return FALSE;
		return QwtPlotZoomer::accept(pa);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你正在使用 QwtPlot 库,可以通过以下步骤实现游标移动: 1. 创建一个 QwtPlotMarker 对象来表示游标。 2. 将游标添加到 QwtPlot 中。使用 QwtPlot::insertMarker() 或 QwtPlot::addMarker() 方法来添加游标。 3. 捕获鼠标移动事件,并在事件处理程序中更新游标位置。 以下是示例代码: ```cpp // 创建游标对象 QwtPlotMarker *cursor = new QwtPlotMarker(); cursor->setLineStyle(QwtPlotMarker::VLine); cursor->setLinePen(Qt::black); cursor->setXValue(0.0); // 初始位置 // 将游标添加到 QwtPlot cursor->attach(qwtPlot); // 捕获鼠标移动事件 qwtPlot->canvas()->installEventFilter(this); // 处理鼠标移动事件 bool MyWidget::eventFilter(QObject *obj, QEvent *event) { if (event->type() == QEvent::MouseMove && obj == qwtPlot->canvas()) { QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event); // 将鼠标位置转换为坐标系值 double x = qwtPlot->invTransform(QwtPlot::xBottom, mouseEvent->pos().x()); double y = qwtPlot->invTransform(QwtPlot::yLeft, mouseEvent->pos().y()); // 更新游标位置 cursor->setXValue(x); cursor->setYValue(y); // 重新绘制 QwtPlot qwtPlot->replot(); } return false; } ``` 这段代码创建了一个垂直线样式的游标对象,并将其添加到 QwtPlot 中。然后,它捕获 QwtPlot 的鼠标移动事件,并在事件处理程序中更新游标位置。请注意,这里使用了 QwtPlot::invTransform() 方法将鼠标位置转换为坐标系值。最后,调用 QwtPlot::replot() 方法重新绘制 QwtPlot

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值