Qwt中的鼠标操作之缩放、平移

来源:互联网 发布:西安传智java培训 编辑:程序博客网 时间:2024/05/16 17:52

    由于项目需要绘图,所以采取了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自定义右键为恢复上一级模式的方

式,所以在实际绘图的时候,针对局部放大时,可以根据自己的需要进行修改。

原创粉丝点击