gpt4 book ai didi

qt - 关于任意点缩放 QGraphicsItem

转载 作者:行者123 更新时间:2023-12-02 20:14:00 24 4
gpt4 key购买 nike

我正在尝试围绕鼠标光标缩放对象。我很容易获得鼠标位置,并且可以使用 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);

最佳答案

看一下 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();
}

关于qt - 关于任意点缩放 QGraphicsItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16657397/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com