QGraphicsView Увеличение и уменьшение изображения при помощи колесика мыши
У меня есть заявление сQGraphicsView
окно в середине экрана. Я хочу иметь возможность увеличивать и уменьшать масштаб с помощью колесика прокрутки мыши.
В настоящее время я повторно реализовалQGraphicsView
и переопределить функцию прокрутки мыши, чтобы она не прокручивала изображение (как это происходит по умолчанию).
void MyQGraphicsView::wheelEvent(QWheelEvent *event)
{
if(event->delta() > 0)
{
emit mouseWheelZoom(true);
}
else
{
emit mouseWheelZoom(false);
}
}
поэтому при прокрутке я издаю сигнал true, если колесо мыши вперед, false, если колесо мыши назад.
Затем я подключил этот сигнал к слоту (функция масштабированияСмотри ниже) в классе, который обрабатывает мои вещи GUI. Теперь, в принципе, я думаю, что моя функция масштабирования просто не лучший способ сделать это. Я видел несколько примеров людей, использующих переопределенную функцию wheelevent для установки шкал, но я не смог найти полного ответа.
Так что вместо этого я сделал это, но он не идеален ни в коем случае, поэтому я ищу, чтобы это немного подправили или для рабочего примера с использованием масштаба в функции события wheel.
Я инициализируюm_zoom_level
в0
в конструкторе.
void Display::zoomfunction(bool zoom)
{
QMatrix matrix;
if(zoom && m_zoom_level < 500)
{
m_zoom_level = m_zoom_level + 10;
ui->graphicsView->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
matrix.scale(m_zoom_level, m_zoom_level);
ui->graphicsView->setMatrix(matrix);
ui->graphicsView->scale(1,-1);
}
else if(!zoom)
{
m_zoom_level = m_zoom_level - 10;
ui->graphicsView->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
matrix.scale(m_zoom_level, m_zoom_level);
ui->graphicsView->setMatrix(matrix);
ui->graphicsView->scale(1,-1);
}
}
Как вы можете видеть выше, я используюQMatrix
и масштабируя это и устанавливая его в Graphicsview и устанавливая привязку преобразования под мышью, но иногда это просто не работает идеально, если я прокручиваю нагрузки, он просто начинает только увеличивать масштаб (что, я думаю, связано с циклом int более или что-то).
Как я уже сказал, помощь с этим или хорошим примером масштабирования под мышью была бы отличной.