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