2013-05-20 45 views
3

我想縮放關於鼠標光標的對象。我很容易獲得鼠標位置,並且我可以使用item-> setScale(n)縮放對象。但是,我不確定如何真正將翻譯合併到任意點。比例QGraphicsItem關於任意點

有沒有一種方法來設置比例中心?如果不是,我該如何去做這件事?

這是我迄今爲止我在變焦:

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); 
+1

是'jqtransform'標籤相關的? – cmannett85

+0

不,我其實不知道那是怎麼到的。感謝您的領導:) –

回答

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(); 
} 
+0

不幸的是,它似乎並沒有工作。我更新了這個問題 –