Class 派生自 QwtPlotZoomer 未按预期工作

Class derived from QwtPlotZoomer not working as intended

我正在写一个 class MyPlotZoomer 派生自 QwtPlotZoomerMyPlotZoomerQwtPlotZoomer 的不同之处在于,为了激活和绘制缩放矩形,用户必须按住 ctrl 键,单击并拖动,然后释放鼠标按钮。

为此,我重写了QWtPlotZoomerwidgetMouseReleaseEventwidgetMousePressEventwidgetMouseMoveEvent中的三个方法,如下:

#include <QWidget>
#include "qwt_plot.h"
#include "qwt_plot_zoomer.h"
#include <QMouseEvent>

class MyPlotZoomer : public QwtPlotZoomer
{

  public:
    // constructor
        explicit MyPlotZoomer( QWidget *canvas );
    // destructor

    // function prototypes

    // data
  protected:
    // function prototypes
    virtual void widgetMouseReleaseEvent( QMouseEvent *mouse_event ) override{
        if( mouse_event->modifiers() & Qt::ControlModifier ){
          QwtPlotZoomer::widgetMouseReleaseEvent( mouse_event );
        }
    };

    virtual void widgetMousePressEvent( QMouseEvent *mouse_event ) override{
        if( mouse_event->modifiers() & Qt::ControlModifier ){
          QwtPlotZoomer::widgetMousePressEvent( mouse_event );
        }
    };
    virtual void widgetMouseMoveEvent( QMouseEvent *mouse_event ) override{
        if( mouse_event->modifiers() & Qt::ControlModifier ){
          QwtZoomer::widgetMouseMoveEvent( mouse_event );
        }
    };


};

但是,按 ctrl 键然后绘图没有任何作用。缩放矩形不显示。我在这里做错了什么?

你需要更换

if( mouse_event->modifiers() & Qt::ControlModifier ){

if( mouse_event->modifiers().testFlag(Qt::ControlModifier) ){

if( mouse_event->modifiers() | Qt::ControlModifier ){

其他地方也是如此

加法。 要缩放 in/out,您需要在释放事件上调用 QwtPlotZoomer::zoom()。在按下事件开始创建矩形时,在移动时 - 分别修改矩形并在释放时以该矩形作为参数调用缩放

QwtPlotZoomer 的基础 class 之一是 QwtEventPattern,它允许更改使用的 key/mouse 组合类型。 因此,没有理由从 QwtPlotZoomer 派生,因为 setKeyPattern/setMousePattern 以更简单的方式进行。

使用的 Mouse/Key 模式取决于分配给缩放器的状态机 ( QwtPickerMachine )。查看相应的 class 文档。