我正在尝试缩放关于鼠标光标的对象。我很容易得到鼠标位置,我可以使用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);
答案 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();
}