我的问题非常有趣。我正在研究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轴。我究竟做错了什么?
此致
注意:抱歉我的英语不好。
答案 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);
}
如果不手动处理任何事件,这应该可以解决问题。