Class 派生自 QwtPlotZoomer 未按预期工作
Class derived from QwtPlotZoomer not working as intended
我正在写一个 class 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 键然后绘图没有任何作用。缩放矩形不显示。我在这里做错了什么?
你需要更换
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 文档。
我正在写一个 class 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 键然后绘图没有任何作用。缩放矩形不显示。我在这里做错了什么?
你需要更换
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 文档。