一、分析
绘制好图形之后,如果有些我们关注的点不好分析,可能就需要局部放大,将我们关注的点所在区域进行局部放大。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);
}
本文介绍了如何利用QWT库中的QwtPlotZoomer类进行图形的局部放大操作。QwtPlotZoomer可以理解为一个栈,通过鼠标左键选择矩形区域进行缩放,并可以通过键盘快捷键进行前进、后退。对于界面按钮控制缩放,可以通过模拟键盘事件来触发预设的前进和后退功能。
2009

被折叠的 条评论
为什么被折叠?



