QWT--图形框选局部放大

本文介绍了如何利用QWT库中的QwtPlotZoomer类进行图形的局部放大操作。QwtPlotZoomer可以理解为一个栈,通过鼠标左键选择矩形区域进行缩放,并可以通过键盘快捷键进行前进、后退。对于界面按钮控制缩放,可以通过模拟键盘事件来触发预设的前进和后退功能。

一、分析

绘制好图形之后,如果有些我们关注的点不好分析,可能就需要局部放大,将我们关注的点所在区域进行局部放大。QWT库提供了QwtPlotZoomer类用于实现该操作,可以把它理解为一个栈,里面存放着我们框选的矩形,可以通过调整遍历栈的方向实现前进、后退操作。


二、效果展示

在这里插入图片描述


三、具体操作

QwtPlotZoomer类通过鼠标左键来选取矩阵框,作为显示的区域;访问堆栈的功能键可以设置为鼠标或者键盘,方法如下:

//设置鼠标键为功能键
plot_zoomer = new QwtPlotZoomer(this->canvas());
plot_zoomer->setMousePattern(QwtEventPattern::MouseSelect3, Qt::MidButton ); 
plot_zoomer->setMousePattern(QwtEventPattern::MouseSelect6, Qt::MidButton, Qt::ControlModifier );
plot_zoomer->setMousePattern(QwtEventPattern::MouseSelect2, Qt::MidButton, Qt::ShiftModifier );


//设置键盘按键为功能键
plot_zoomer = new QwtPlotZoomer(this->canvas());
plot_zoomer->setKeyPattern(QwtEventPattern::KeyRedo,Qt::Key_I,Qt::ShiftModifier);
plot_zoomer->setKeyPattern(QwtEventPattern::KeyUndo,Qt::Key_O,Qt::ShiftModifier);
plot_zoomer->setKeyPattern(QwtEventPattern::KeyHome,Qt::Key_Home);

如果希望通过界面按钮来选择前进、后退,例如:

此时无论是设置键盘还是鼠标为功能键似乎都不好使,此时就需要模拟键盘按下时间来触发设置的键盘功能键:

QStack<QRectF> zoomRectStack;					//缩放堆栈

//堆栈前移
zoomRectStack = m_pPlot_View->get_plot_zoomer()->zoomStack();//获取缩放堆栈
int Depth = zoomRectStack.size(); //获取缩放堆栈当前长度
int currentRect = m_pPlot_View->get_plot_zoomer()->zoomRectIndex(); //获取缩放堆栈当前下标
if(currentRect<Depth-1)
{
	QWidget *receiver = QApplication::focusWidget();
	QKeyEvent keyPress(QEvent::KeyPress, Qt::Key_I, Qt::NoModifier, QString("I"));
	QKeyEvent keyRelease(QEvent::KeyRelease, Qt::Key_I, Qt::NoModifier, QString("I"));
	QApplication::sendEvent(receiver, &keyPress);
	QApplication::sendEvent(receiver, &keyRelease);
}

//堆栈后移
zoomRectStack = m_pPlot_View->get_plot_zoomer()->zoomStack();//获取缩放堆栈
int Depth = zoomRectStack.size(); //获取缩放堆栈当前长度
int currentRect = m_pPlot_View->get_plot_zoomer()->zoomRectIndex(); //获取缩放堆栈当前下标
if(currentRect>0)
{
	QWidget *receiver = QApplication::focusWidget();
	QKeyEvent keyPress(QEvent::KeyPress, Qt::Key_O, Qt::NoModifier, QString("O"));
	QKeyEvent keyRelease(QEvent::KeyRelease, Qt::Key_O, Qt::NoModifier, QString("O"));
	QApplication::sendEvent(receiver, &keyPress);
	QApplication::sendEvent(receiver, &keyRelease);			
}	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贝勒里恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值