一、滚轮放大缩小
QWT中提供了QwtPlotMagnifier类,用于实现鼠标滚轮放大和缩小图形的效果,其实本质就是修改x轴和y轴的范围。
二、拖拽视窗
QWT中提供了QwtPlotPanner类,用于实现鼠标拖动画布的效果,其实本质就是修改x轴和y轴的范围。
附一
各种功能有时候可能会发生冲突,例如框选放大功能和拖拽视窗功能都需要鼠标点击移动事件。如果两个功能同时开启的话,效果就会很糟糕,所以可以给每个功能加一个开关,由用户来自己调节:
//头文件
QwtPlotZoomer *plot_zoomer; //框选放大
QwtPlotMagnifier *plot_magnifier; //滚轮放大缩小
QwtPlotPanner *plot_panner; //拖拽视窗
//构造函数
plot_zoomer = NULL;
plot_magnifier = NULL;
plot_panner = NULL;
//开关函数
void Plot_View::switch_rect_in(bool on_or_off)
{
if(on_or_off)
{
plot_zoomer = new QwtPlotZoomer(current_x,current_y,this->canvas());
//设置鼠标键为功能键
plot_zoomer->setMousePattern(QwtEventPattern::MouseSelect3, Qt::MidButton );
plot_zoomer->setMousePattern(QwtEventPattern::MouseSelect6, Qt::MidButton, Qt::ControlModifier );
plot_zoomer->setMousePattern(QwtEventPattern::MouseSelect2, Qt::MidButton, Qt::ShiftModifier );
//设置键盘按键为功能键
plot_zoomer->setKeyPattern(QwtEventPattern::KeyRedo,Qt::Key_I);
plot_zoomer->setKeyPattern(QwtEventPattern::KeyUndo,Qt::Key_O);
plot_zoomer->setKeyPattern(QwtEventPattern::KeyHome,Qt::Key_Home);
}
else
{
delete plot_zoomer;
plot_zoomer = NULL;
}
}
void Plot_View::switch_in_out(bool on_or_off)
{
if(on_or_off)
{
plot_magnifier = new QwtPlotMagnifier(this->canvas());
}
else
{
delete plot_magnifier;
plot_magnifier = NULL;
}
}
void Plot_View::switch_drag(bool on_or_off)
{
if(on_or_off)
{
plot_panner = new QwtPlotPanner(this->canvas());
}
else
{
delete plot_panner;
plot_panner = NULL;
}
}