В настоящее время я повторно реализовал QGraphicsView и переопределил функцию прокрутки мыши, чтобы она не прокручивала изображение (как это происходит по умолчанию).
Код: Выделить всё
void MyQGraphicsView::wheelEvent(QWheelEvent *event)
{
if(event->delta() > 0)
{
emit mouseWheelZoom(true);
}
else
{
emit mouseWheelZoom(false);
}
}
Затем я подключил этот сигнал к слоту (функция масштабирования см. ниже) в классе, который обрабатывает мои элементы графического интерфейса. По сути, я думаю, что моя функция масштабирования — не лучший способ сделать это. Я видел несколько примеров, когда люди использовали переопределенную функцию Wheelevent для установки масштабов, но я не смог найти полного ответа.
Вместо этого я сделал это, но это ни в коем случае не идеально, поэтому я ищу, чтобы это немного подправили или рабочий пример с использованием масштабирования в функции события колеса.
Я инициализирую 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);
}
}
Как я уже сказал, помощь с этим или хороший пример масштабирования под мышью были бы великолепны.
Подробнее здесь: https://stackoverflow.com/questions/191 ... ouse-wheel