3

マウス カーソルを中心にオブジェクトをスケーリングしようとしています。マウスの位置を簡単に取得でき、item->setScale(n) を使用してオブジェクトを問題なくスケーリングできます。しかし、恣意的な点を説明するために実際に翻訳を組み込む方法がわかりません。

スケールの中心を設定する方法はありますか? そうでない場合、どうすればこれを行うことができますか?

これは、ズームインのためにこれまでに持っているものです。

center = this->mapFromParent(center);
qDebug() << center;
this->setTransformOriginPoint(center);
QTransform transform;
transform = transform.scale(transform.m11() * 1.05, transform.m22() * 1.05);
this->setTransform(transform, true);
this->setTransformOriginPoint(0, 0);
4

1 に答える 1

1

QGraphicsItem::setTransformOriginPoint() を見てください。アイテム座標での位置を取るため、おそらくマウスの位置をアイテム座標にマップする必要があります。

これはあなたの期待どおりに機能しているようです:

class Scene : public QGraphicsScene
{
public:

    QGraphicsItem* item;

    Scene(QObject* parent = nullptr) 
        : QGraphicsScene(parent)
    {
        setSceneRect(0, 0, 500, 500);
        item = addRect(200, 200, 100, 100, QPen(Qt::black), QBrush(Qt::red));
    }

    void wheelEvent(QGraphicsSceneWheelEvent* event) 
    {
        /*Scale 0.2 each turn of the wheel (which is usually 120.0 eights of degrees)*/ 
        qreal scaleFactor = 1.0 + event->delta() * 0.2 / 120.0;             
        item->setTransformOriginPoint(item->mapFromScene(event->scenePos()));
        item->setScale(item->scale() * scaleFactor);
    }   
};

int main(int argc, char ** argv)
{
    QApplication a(argc, argv);

    Scene* scene = new Scene;

    QGraphicsView view(scene);

    view.resize(600, 600);
    view.show();

    return a.exec();
}
于 2013-05-20T20:12:23.503 に答える