从QwtPlotZoomer派生的类无法正常工作

时间:2018-12-21 09:03:27

标签: c++ qt qt5 qwt

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

2 个答案:

答案 0 :(得分:1)

QwtPlotZoomer的基本类之一是QwtEventPattern,它允许更改所使用的键/鼠标组合类型。 因此,没有必要像QKeyPattern / setMousePattern这样简单得多地从QwtPlotZoomer派生它。

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

答案 1 :(得分:0)

您需要替换

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

使用

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

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

在其他地方

添加。 要放大/缩小,您需要在发布事件上调用QwtPlotZoomer :: zoom()。在新闻事件中开始创建矩形时,在移动中-分别修改矩形,并在发布时以该矩形作为参数调用zoom