我正在编写从MyPlotZoomer
派生的类QwtPlotZoomer
。 MyPlotZoomer
与QwtPlotZoomer
的不同之处在于,要激活并绘制缩放矩形,用户必须按住ctrl键,单击并拖动,然后释放鼠标按钮。
为此,我以下列方式覆盖了QWtPlotZoomer
,widgetMouseReleaseEvent
,widgetMousePressEvent
和widgetMouseMoveEvent
的三种方法:
#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)。检查相应的类文档。