масштабирование с помощью Ctrl + колесико мыши

Моя проблема очень интересна для меня. Я работаю над 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);
}
}

сдвиг + колесо мыши работает для увеличения относительно оси X. Но Ctrl + колесико мыши масштабирует оси X и Y. Что я делаю неправильно?

С уважением

Примечание: извините за мой плохой английский.

1

Решение

Вы совершенно не поняли Qwt API. Я бы сказал, что у вас есть утечка памяти, которая останется незамеченной для большинства инструментов.
QwtPlotMagnifier должен быть создан один раз во время строительства и жить так долго, как это необходимо.

я проверяю код и как я подозревал 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);
}

Это должно делать свое дело без ручной обработки каких-либо событий.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]