PDA

View Full Version : Change mouse bindings for qwtplotzoomer



ivareske
4th February 2011, 14:00
Hi

I`m creating a plot widget based on QwtPlot that has three buttons to toggle zoom-in, zoom-out, and panning/draggin (like in matlab). How can I change the mouse bindings? I have slots that are called when the different buttons are toggled. I want to set the left mouse-button to handle everything depending on which button is toggled: zoom in when zoom-in is toggled, zoom out when zoom-out is toggled, and pan/drag the plot when the pan-button is toggled. So far I`ve tried
setMousePattern(QwtEventPattern::MouseSelect3,Qt:: LeftButton); // when pan is toggled

setMousePattern(QwtEventPattern::MouseSelect2,Qt:: LeftButton); // when zoom-out is toggled


setMousePattern(QwtEventPattern::MouseSelect1,Qt:: LeftButton); // when zoom-in is toggled

but it doesn`t give me the right behaviour. I don`t want to zoom-out using right-clicks as that button is used for conext-menu. And not all mouses have a mid-button for panning...

-Ivar

ivareske
8th February 2011, 08:36
Solved it....

d_stranz
8th February 2011, 23:56
Solved it....

Nice. Don't bother to show how, because that might help someone else with a similar problem. After all, this forum exists only to answer your questions, not to help the community as a whole.

ivareske
14th February 2011, 12:33
Really...? I thought this forum only existed to solve my problems...

--------------------------------------------------------Zoomer.h
#ifndef ZOOMER_H
#define ZOOMER_H

#include <qwt_plot_zoomer.h>


class Zoomer: public QwtPlotZoomer{

public:
enum zoomMode{In, Out};
Zoomer(int xAxis, int yAxis, QwtPlotCanvas *canvas);
bool zoomModeEnabled( Zoomer::zoomMode mode ) const;
void enableZoomMode( Zoomer::zoomMode mode, bool enabled );
private:
bool zoomIn_;
bool zoomOut_;
};


#endif


-----------------------------------------------Zoomer.cpp
#include "Zoomer.h"




Zoomer::Zoomer(int xAxis, int yAxis, QwtPlotCanvas *canvas) : QwtPlotZoomer(xAxis, yAxis, canvas){

setSelectionFlags(QwtPicker::DragSelection | QwtPicker::CornerToCorner);
setTrackerMode(QwtPicker::AlwaysOff);
setRubberBand(QwtPicker::NoRubberBand);

// RightButton: zoom out by 1
// Ctrl+RightButton: zoom out to full size

//setMousePattern(QwtEventPattern::MouseSelect2,Qt:: RightButton, Qt::ControlModifier);
//setMousePattern(QwtEventPattern::MouseSelect3,Qt:: RightButton);

//setMousePattern(QwtEventPattern::MouseSelect2,Qt:: NoButton, Qt::ControlModifier);
//setMousePattern(QwtEventPattern::MouseSelect3,Qt:: NoButton);

setMousePattern(QwtEventPattern::MouseSelect1,Qt:: NoButton);
setMousePattern(QwtEventPattern::MouseSelect2,Qt:: NoButton);
setMousePattern(QwtEventPattern::MouseSelect3,Qt:: NoButton);
setMousePattern(QwtEventPattern::MouseSelect4,Qt:: NoButton);
setMousePattern(QwtEventPattern::MouseSelect5,Qt:: NoButton);
setMousePattern(QwtEventPattern::MouseSelect6,Qt:: NoButton);

zoomIn_ = false;
zoomOut_ = false;

}

void Zoomer::enableZoomMode( Zoomer::zoomMode mode, bool enabled ){
if( mode==Zoomer::In ){
zoomIn_ = enabled;
zoomOut_ = false;
setMousePattern(QwtEventPattern::MouseSelect3,Qt:: NoButton);
if( enabled ){
setMousePattern(QwtEventPattern::MouseSelect1,Qt:: LeftButton);
}else{
setMousePattern(QwtEventPattern::MouseSelect1,Qt:: NoButton);
}
}
if( mode==Zoomer::Out ){
zoomIn_ = false;
setMousePattern(QwtEventPattern::MouseSelect1,Qt:: NoButton);
zoomOut_ = enabled;
if( enabled ){
setMousePattern(QwtEventPattern::MouseSelect3,Qt:: LeftButton);
}else{
setMousePattern(QwtEventPattern::MouseSelect3,Qt:: NoButton);
}
}

}

bool Zoomer::zoomModeEnabled( Zoomer::zoomMode mode ) const{
if( mode==Zoomer::In ){
return zoomIn_;
}else{
return zoomOut_;
}

}

sergio.hs84
22nd March 2011, 09:48
Please, don't argue. This code snippets help me a lot.

npatil15
22nd January 2019, 09:27
Hi ivareske,

Can you help me in below regards,
How did you add button to toggle QwtPlotZoomer on legend ?

Please reply, I'm stuck in this

Thanks