我正在编写从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键然后绘图不会执行任何操作。缩放矩形不显示。我在这里做错了什么?

最佳答案

QwtPlotZoomer的基本类之一是QwtEventPattern,它允许更改使用哪种类型的键/鼠标组合。
因此,没有必要从QwtPlotZoomer派生出来,因为setKeyPattern / setMousePattern可以以更简单的方式进行操作。

使用的鼠标/键模式取决于分配给缩放器的状态机(QwtPickerMachine)。检查相应的类文档。

10-08 00:41