QwtPlotZoomer源码解读

QwtPlotZoomer对一个绘图窗体提供了缩放存储栈

QwtPlotZoomer从用户的输入(鼠标或键盘)选择矩形,并把他们转换到绘图坐标系上,然后依据选中的矩形范围调整坐标轴。

选中区域由橡皮筋(可自由拉伸)所支持,还可以选择显示当前鼠标位置的坐标。

缩放可以尽可能多的重复,它仅受maxStackDepth()或minZoomSize()的限制。每一个矩形都被放在一个堆栈里。

如何选择矩形的默认设置是QwtPickerDragRectMachine,具有以下属性:

QwtEventPattern::MouseSelect1:缩放矩形的第一个点是鼠标按下处的坐标,第二个点是鼠标释放处的坐标
QwtEventPattern::KeySelect1:缩放矩形的第一个点是按下的第一个键,第二个点是按下的第二个键
QwtEventPattern::KeyAbort:在选择第一个点的状态下放弃选择

要遍历缩放堆栈,使用如下属性:

QwtEventPattern :: MouseSelect3,QwtEventPattern :: KeyUndo:向堆栈底部方向遍历
QwtEventPattern :: MouseSelect6,QwtEventPattern :: KeyRedo:向堆栈顶部方向遍历
QwtEventPattern :: MouseSelect2,QwtEventPattern :: KeyHome:直接回到堆栈底部

#ifndef QWT_PLOT_ZOOMER_H
#define QWT_PLOT_ZOOMER_H

#include "qwt_global.h"
#include "qwt_plot_picker.h"
#include <qstack.h>

/***************************************************
缩放器设置为启用的画布所在QwtPlot的x轴和y轴。 如果x轴未启用,则将选择器设置为QwtPlot::xBottom。 如果y轴未启用,则将其设置为QwtPlot::yLeft。
缩放器使用QwtPickerDragRectMachine初始化,跟踪器模式设置为QwtPicker::ActiveOnly,橡皮筋设置为QwtPicker::RectRubberBand
***************************************************/

class QWT_EXPORT QwtPlotZoomer: public QwtPlotPicker
{
    Q_OBJECT
public:
    //在画布上创建一个缩放器
    explicit QwtPlotZoomer( QWidget *, bool doReplot = true );
    explicit QwtPlotZoomer( int xAxis, int yAxis,
                            QWidget *, bool doReplot = true );
	
    virtual ~QwtPlotZoomer();

    //以scaleRect()为基础重新初始化缩放堆栈
    virtual void setZoomBase( bool doReplot = true );
    //设置缩放器的初始尺寸
    //base与当前scaleRect()结合在一起,并且缩放堆栈重新初始化为base。 图被缩放到scaleRect()
    virtual void setZoomBase( const QRectF & );

    //返回缩放堆栈底部矩形
    QRectF zoomBase() const;
    //返回缩放堆栈当前位置处的矩形
    QRectF zoomRect() const;

    //设置缩放器到指定的轴上
    virtual void setAxis( int xAxis, int yAxis );

    //将递归缩放操作的数量限制为深度
    //深度值=-1则缩放为无限制,深度值=0则禁用缩放。 如果当前缩放矩形超过深度,则图不缩放
    void setMaxStackDepth( int );
    //返回缩放堆栈的最大深度
    int maxStackDepth() const;

    //返回缩放堆栈
    const QStack<QRectF> &zoomStack() const;
    //分配缩放堆栈
    void setZoomStack( const QStack<QRectF> &,
        int zoomRectIndex = -1 );

    //返回缩放堆栈当前位置处的下标
    uint zoomRectIndex() const;

public Q_SLOTS:
    //移动当前的缩放矩形,x、y为偏移值
    void moveBy( double x, double y );
    //移动当前的缩放矩形到指定坐标
    virtual void moveTo( const QPointF & );
	
    //清除缩放堆栈当前位置上的所有矩形,并将标准化的矩形放在上面
    //放大
    virtual void zoom( const QRectF & );
    //在缩放堆栈上激活一个相对于当前位置有一定偏移的矩形,偏移值为负则缩小,正则放大,0则缩小为缩放基准
    //放大或缩小
    virtual void zoom( int up );

Q_SIGNALS:
    //当图被放大或缩小时,发送zoomRect()
    void zoomed( const QRectF &rect );

protected:
    //将zoomRect()调整到观察视图上
    virtual void rescale();
	
    //将缩放限制为最小矩形
    virtual QSizeF minZoomSize() const;
	
    //默认为:鼠标中键缩小,右键返回缩放基准
    //改变缩放堆栈的当前位置,但是不删除缩放堆栈内的任何矩形
    virtual void widgetMouseReleaseEvent( QMouseEvent * );
    //默认为:+键放大,-键缩小,Esc键返回多发基准
    //改变缩放堆栈的当前位置,但是不删除缩放堆栈内的任何矩形
    virtual void widgetKeyPressEvent( QKeyEvent * );

    //当栈深度太深或者缩放矩形是最小缩放尺寸,拒绝选择
    virtual void begin();
    //将选定的矩形展开为minZoomSize()并放大(如果接受)
    virtual bool end( bool ok = true );
    //拒绝高度或宽度<2的矩形,否则将所选矩形展开为最小尺寸11x11并接受
    //检查并调正选定矩形
    virtual bool accept( QPolygon & ) const;

private:
    //初始化缩放器
    void init( bool doReplot );

    class PrivateData; //嵌套类,封装数据 
    PrivateData *d_data;
};

#endif

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
flowable源码解读是指对flowable工作流引擎的源代码进行分析和理解。flowable是一个开源的工作流引擎,用于实现和管理复杂的业务流程。在源码解读过程中,可以深入了解flowable的设计原理、核心组件和算法实现。 根据引用,流程定义是将一个流程XML文件部署到flowable中,从而创建一个定义好的流程。因此,在flowable的源码解读中,可以关注流程定义的实现方式和流程XML文件的解析过程。 引用中提到了从基础讲起,结合应用场景,由浅入深地解释BPMN和Flowable的相关组件,并结合具体实例演示功能的使用和注意事项。这表明在源码解读中,可以结合实际应用场景,逐步深入地了解Flowable的不同组件的实现原理和使用方式。 引用中介绍了BPMN2.0定义的流程元素,包括流程对象、连接对象、泳道和数据和制品。在源码解读中,可以重点关注这些元素的实现和它们在flowable源代码中的具体实现方式。 总而言之,flowable源码解读是通过对flowable工作流引擎的源代码进行分析和理解,来深入了解flowable的设计原理、核心组件和算法实现。通过结合实际应用场景和流程定义的解析过程,我们能够更加全面地理解flowable工作流引擎的实现原理和使用方式。<span class=&quot;em&quot;>1</span><span class=&quot;em&quot;>2</span><span class=&quot;em&quot;>3</span> #### 引用[.reference_title] - *1* *3* [Flowable从入门到源码分析](https://blog.csdn.net/weixin_46399870/article/details/130277499)[target=&quot;_blank&quot; data-report-click={&quot;spm&quot;:&quot;1018.2226.3001.9630&quot;,&quot;extra&quot;:{&quot;utm_source&quot;:&quot;vip_chatgpt_common_search_pc_result&quot;,&quot;utm_medium&quot;:&quot;distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2&quot;}}] [.reference_item style=&quot;max-width: 50%&quot;] - *2* [Flowable从入门到精通源码](https://download.csdn.net/download/qq_36305027/85422953)[target=&quot;_blank&quot; data-report-click={&quot;spm&quot;:&quot;1018.2226.3001.9630&quot;,&quot;extra&quot;:{&quot;utm_source&quot;:&quot;vip_chatgpt_common_search_pc_result&quot;,&quot;utm_medium&quot;:&quot;distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2&quot;}}] [.reference_item style=&quot;max-width: 50%&quot;] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

贝勒里恩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值