QGraphicsView Увеличение и уменьшение масштаба под положением мыши с помощью колеса мышиC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 QGraphicsView Увеличение и уменьшение масштаба под положением мыши с помощью колеса мыши

Сообщение Anonymous »

У меня есть приложение с окном QGraphicsView в центре экрана. Я хочу иметь возможность увеличивать и уменьшать масштаб с помощью прокрутки колеса мыши.

В настоящее время я повторно реализовал QGraphicsView и переопределил функцию прокрутки мыши, чтобы она не прокручивала изображение (как это происходит по умолчанию).

Код: Выделить всё

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

Как я уже сказал, помощь с этим или хороший пример масштабирования под мышью были бы великолепны.

Подробнее здесь: https://stackoverflow.com/questions/191 ... ouse-wheel
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • QGraphicsView Увеличение и уменьшение масштаба под положением мыши с помощью колеса мыши
    Anonymous » » в форуме C++
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Увеличение и уменьшение масштаба щелчком мыши с помощью CSS
    Anonymous » » в форуме CSS
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Увеличение и уменьшение масштаба по центру курсора мыши в 2D с помощью ImGUI
    Anonymous » » в форуме C++
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Qgraphicsview увеличивает и выходит в положение мыши с использованием колеса мыши
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Qgraphicsview увеличивает и выходит в положение мыши с использованием колеса мыши
    Anonymous » » в форуме C++
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»