0

wheelEventを使用してQGraphicsViewのズームを実装しています

void View::wheelEvent(QWheelEvent *e)
{
    if (e->modifiers().testFlag(Qt::ControlModifier)){ // zoom only when CTRL key pressed

        int numSteps = e->delta() / 15 / 8;

        if (numSteps == 0) {
            e->ignore();
            return;
        }
        qreal sc = pow(1.25, numSteps); // I use scale factor 1.25
        this->zoom(sc);


        e->accept();
    }
}

そしてズームアイテム

void View::zoom(qreal scaleFactor)
{

     scale(scaleFactor, scaleFactor);

}

ここでは、ズームアウトをあまり深くしたくありません。スケーリングを特定のポイントに制限するために必要なだけです。ズームアウトを制限する必要があるため、変換ポイントを見つけようとしました

qreal
View::zoomScale() const
{
    return transform().m11();
}

しかし、これでズームを制限することはできません。解決策を見つけるのを手伝ってください。

4

1 に答える 1

1

「通常のズーム」に対するズーム倍率を計算し、ズームできるかどうかを決定できます。

たとえば、参照用に QRect を取得し、ズーム後にそのサイズを確認できます。

void ClassA::scale(qreal scaleFactor) {
    QRectF(0, 0, 1, 1); // A reference
    qreal factor = transform().scale(scaleFactor, scaleFactor).mapRect(r).width(); // absolute zoom factor
    if ( factor > 20 ) { // Don't zoom more than 20x
        return;
    }

    this->scale(scaleFactor, scaleFactor);
}
于 2013-03-29T14:03:16.583 に答える