使用ctrl +鼠标滚轮进行缩放

时间:2014-01-02 08:59:37

标签: c++ qt zoom qwt

我的问题非常有趣。我正在研究Qwt,我想分别启用缩放X和Y轴。我只能缩放X轴,但Y轴不起作用。我无法得到它。如果你提出建议,我会很高兴的。

这是我的代码:

void Kmh::keyPressEvent(QKeyEvent *event)
{
    zoom_in_out = new QwtPlotMagnifier( canvas() );

    if(event->key() == Qt::Key_Shift)
    {
        zoom_in_out->setWheelModifiers(Qt::ShiftModifier);
        zoom_in_out->setAxisEnabled(Qt::XAxis,false);
    }
    else if(event->key() == Qt::Key_Control)
    {
        zoom_in_out->setWheelModifiers(Qt::ControlModifier);
        zoom_in_out->setAxisEnabled(Qt::YAxis,false);
    }
}  

shift +鼠标滚轮适用于缩放X轴。但是 ctrl + mousewheel正在缩放X轴和Y轴。我究竟做错了什么?

此致

注意:抱歉我的英语不好。

1 个答案:

答案 0 :(得分:4)

你完全误解了Qwt API。我会说你有内存泄漏,大多数工具都无法检测到。 QwtPlotMagnifier应在施工期间创建一次,并在需要时生效。

我检查the code,因为我怀疑QwtPlotMagnifier使用事件过滤器来处理情节的事件。在建设时间召唤一次应该可以解决这个问题:

void Kmh::setupWheelZooming()
{
    QwtPlotMagnifier *zoom_x = new QwtPlotMagnifier( canvas() );
    QwtPlotMagnifier *zoom_y = new QwtPlotMagnifier( canvas() );
    zoom_x->setWheelModifiers(Qt::ShiftModifier);
    zoom_x->setAxisEnabled(Qt::XAxis, true);
    zoom_x->setAxisEnabled(Qt::YAxis,false);
    zoom_y->setWheelModifiers(Qt::ControlModifier);
    zoom_y->setAxisEnabled(Qt::XAxis,false);
    zoom_y->setAxisEnabled(Qt::YAxis,true);
} 

如果不手动处理任何事件,这应该可以解决问题。