由于项目需要绘图,所以采取了Qwt作为Qt插件,进行图形的绘制。Qwt的安装前面的博文已经解决。
使用Qwt在Qt上绘制图形,需要用到缩放、平移等操作,通过查看Qwt自带的例子看到了如下语句:
#include <qwt_plot_zoomer.h>#include <qwt_plot_panner.h>#include <qwt_plot_magnifier.h>
QwtPlotZoomer *zoomer = new QwtPlotZoomer( canvas ); //选择图形局部放大zoomer->setRubberBandPen( QColor( Qt::blue ) ); //勾选扩大区域边界颜色zoomer->setMousePattern( QwtEventPattern::MouseSelect2, Qt::RightButton, Qt::ControlModifier );//ctrl+右键==回复到原始状态zoomer->setMousePattern( QwtEventPattern::MouseSelect3, Qt::RightButton ); //右键==恢复到上一次扩大之前的状态
QwtPlotPanner *panner = new QwtPlotPanner( canvas ); //默认的左键移动功能panner->setMouseButton( Qt::RightButton ); //设置哪个按钮移动画布 如果不设置(注册掉当前行)按钮默认为左键为移动
QwtPlotMagnifier magnifier = new QwtPlotMagnifier( canvas ); //默认的滑轮及右键缩放功能 图形的整体缩放magnifier->setMouseButton(Qt::LeftButton); //设置哪个按钮与滑轮为缩放画布 如果不设置(注册掉当前行)按钮默认为滑轮以及右键为缩放
对于移动以及图形的整体缩放,通过void setMouseButton( Qt::MouseButton, Qt::KeyboardModifiers = Qt::NoModifier );便能修改自己对应功能的按钮。
对于图形局部放大,也是通过设置setMouseButton,但是参数有所不同,void setMousePattern( MousePatternCode, Qt::MouseButton
button, Qt::KeyboardModifiers = Qt::NoModifier );对于第一个参数,由对应的文档可知,有MousePatternCode是枚举型,有7个可选值,其中6个
MouseSelect1-6,是设置鼠标模型值。Qwt例子中局部放大(左键放大,右键还原上一级图形,ctrl+右键还原原始图形),是通过设置2,3.。具体的含义
可能由于自己英文水平有限,在文档中没有找到,采用了最笨的方法进行了测试,得到1-3对应的功能,但是4-6却没有能够知道其作用,如果有知道的
朋友,麻烦告诉一下,在此先谢过。
模式一 //默认右键恢复原样···放大的方式可以自定义
zoomer->setMousePattern( QwtEventPattern::MouseSelect1, Qt::LeftButton, Qt::ControlModifier );//crtl+左键 放大 右键恢复原样
zoomer->setMousePattern( QwtEventPattern::MouseSelect1, Qt::RightButton, Qt::ControlModifier );//ctrl+右键 放大 右键恢复原样
zoomer->setMousePattern( QwtEventPattern::MouseSelect1, Qt::LeftButton ); //左键放大 右键恢复原样
zoomer->setMousePattern( QwtEventPattern::MouseSelect1, Qt::RightButton ); //右键放大与恢复重叠 不推荐使用
模式二 //默认左键放大···恢复原样的方式可以自定义
zoomer->setMousePattern( QwtEventPattern::MouseSelect2, Qt::LeftButton, Qt::ControlModifier );//左键 放大 ctrl+左键恢复
zoomer->setMousePattern( QwtEventPattern::MouseSelect2, Qt::RightButton, Qt::ControlModifier );//左键 放大 ctrl+右键恢复原样
zoomer->setMousePattern( QwtEventPattern::MouseSelect2, Qt::LeftButton );//左键放大与左键恢复重叠 不推荐使用
zoomer->setMousePattern( QwtEventPattern::MouseSelect2, Qt::RightButton );//左键放大 右键恢复原样
模式三 //默认左键放大、右键恢复原样···恢复上一级原样可以自方式定义
zoomer->setMousePattern( QwtEventPattern::MouseSelect3, Qt::LeftButton, Qt::ControlModifier );//左键 放大 右键恢复原样 ctrl+左键恢复上一级原样
zoomer->setMousePattern( QwtEventPattern::MouseSelect3, Qt::RightButton, Qt::ControlModifier );//左键 放大 右键恢复原样 ctrl+右键恢复上一级原样
zoomer->setMousePattern( QwtEventPattern::MouseSelect3, Qt::LeftButton );//左键放大与左键恢复重叠 不推荐使用
zoomer->setMousePattern( QwtEventPattern::MouseSelect3, Qt::RightButton );//左键放大 右键恢复原样与恢复上一级原样重叠· 右键恢复原样覆盖恢复上一级原样
QWT中例子 左键放大,右键恢复上一级,ctrl+原样恢复原样
zoomer->setMousePattern( QwtEventPattern::MouseSelect2, Qt::RightButton, Qt::ControlModifier );zoomer->setMousePattern( QwtEventPattern::MouseSelect3, Qt::RightButton );
是一种结合的方式···使用模式2自定义恢复原样的方式,覆盖了默认的右键,然后又用模式3自定义右键为恢复上一级模式的方
式,所以在实际绘图的时候,针对局部放大时,可以根据自己的需要进行修改。