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