Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: INZER от Август 10, 2022, 14:38



Название: QGraphicsView, ограничение зуммирования
Отправлено: INZER от Август 10, 2022, 14:38
Добрый день, первый раз сталкиваюсь с рисованием в Qt

Подскажите пожалуйста как задать рамки для зума.


Само увеличение и уменьшение реализовано довольно тривиально:

Код:
void GraphicsView::wheelEvent(QWheelEvent *e)
{
    if (e->modifiers() & Qt::ControlModifier) {
        if (e->angleDelta().y() > 0)
            view->zoomIn();
        else
            view->zoomOut();
        e->accept();
    } else {
        QGraphicsView::wheelEvent(e);
    }
}

// -----------------------------------------------------------

class View : public QFrame
{
    Q_OBJECT
public:
    explicit View(const QString &, QWidget *parent = nullptr);

    QGraphicsView *view() const;
....
}

void View::setupMatrix()
{
    qreal scale = qPow(qreal(2), (zoomValue - 250) / qreal(50));
    QTransform matrix;
    matrix.scale(scale, scale);
    matrix.rotate(0);
    graphicsView->setTransform(matrix);
    setResetButtonEnabled();
}

void View::zoomIn()
{
    if (zoomValue + ZOOMDELTAVALUE <= ZOOMMAX)
    {
        zoomValue += 6;
        setupMatrix();
    }
}

void View::zoomOut()
{
    if (zoomValue - ZOOMDELTAVALUE >= ZOOMMIN)
    {
        zoomValue -= 6;
        setupMatrix();
    }
}

// -----------------------------------------

    scene =  new QGraphicsScene(this);
    View *view = new View("", this);
    view->view()->setScene(scene);
    scene->addPixmap(QPixmap(":/icons/images/russia.png"));


Как сделать так, чтобы нельзя было уменьшить меньше, чем минимальный размер одной из сторон установленной на сцену картинки, ну и увеличить, например более чем на одну треть от минимальной стороны установленной картинки. Чтоб не было такой ситуации:

http://(https://i.ibb.co/tw0jrsP/2022-08-10-14-30-56.png) (https://ibb.co/0p04bMV)