gpt4 book ai didi

c++ - QTransform scale 和 boundingRect.size() 的关系

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:18:18 24 4
gpt4 key购买 nike

我不太关心 QTransform 比例与 QGraphicsItem 的 boundingRect() 方法中的宽度和高度返回值之间的关系。实际上我想将 QGraphicsItem 缩放为它的 boundingRect 大小。即,如果我在 boundingRect() 方法中传递的项目大小最初为 100,100,之后我将通过 mousemove 事件增加项目的大小。如果我增加的宽度和高度分别是 400,300,那么我的比例因子是 4,3 吗?任何帮助都将不胜感激。

这是代码

this->setPos(minMax().first.x(), minMax().first.y());


qreal w = minMax().second.x() - minMax().first.x();
qreal h = minMax().second.y() - minMax().first.y();

qreal scaleFactorW = w / boundingRect().width();
qreal scaleFactorH = h / boundingRect().height();

QTransform trans;
trans.scale(scaleFactorW, scaleFactorH);
setTransform(trans);

bottomPoints = QPointF(w, h);

minMax 函数是:

float xMin = 0, xMax = 0, yMin = 0, yMax = 0;
QList<double> xValues, yValues;
xValues << shaper[0]->scenePos().x() << shaper[1]->scenePos().x() << shaper[2]->scenePos().x() << shaper[3]->scenePos().x() << shaper[4]->scenePos().x() << shaper[5]->scenePos().x() << shaper[6]->scenePos().x() << shaper[7]->scenePos().x();
yValues << shaper[0]->scenePos().y() << shaper[1]->scenePos().y() << shaper[2]->scenePos().y() << shaper[3]->scenePos().y() << shaper[4]->scenePos().y() << shaper[5]->scenePos().y() << shaper[6]->scenePos().y() << shaper[7]->scenePos().y();
qSort(xValues.begin(), xValues.end());
qSort(yValues.begin(), yValues.end());
xMin = xValues.first();
xMax = xValues.last();
yMin = yValues.first();
yMax = yValues.last();
return qMakePair(QPointF(xMin, yMin), QPointF(xMax, yMax));

shaper 是我调整项目大小的 qgraphicsitem。

谢谢:)

最佳答案

感谢您展示您的代码。

正如我之前所说,

trans.scale(scaleFactorW, scaleFactorH);

不会更改 QGraphicsItem::boundingRect 返回的大小。

但实际上,QGraphicsItem::setScale 具有相同的行为,并且项目的 boundingRect() 也没有改变。

QTransform::scale 和 QGraphicsItem::setScale 是不一样的,但是两者都对改变图像大小很有用。那么,在 QTransform 的情况下,您正在缩放坐标系。

我认为一个例子是解释我自己的最好方式。

(this继承QGraphicsItem)

qWarning() << "QGraphicsItem::scale(): " << this->scale();
QRectF br = this->boundingRect();
qWarning() << "QGraphicsItem::boundingRect() size / x / y / w / h: " << br.size() << " / "
<< br.x() << " / "
<< br.y() << " / "
<< br.width() << " / "
<< br.height();

QTransform trans = this->transform();
trans.scale(2.0, 2.0);
this->setTransform(trans);

/*
Comment trans.scale(2.0, 2.0) and uncomment the following line
to check the difference using the logs.
*/

// this->setScale(2.0);

qWarning() << "QGraphicsItem::scale(): " << this->scale();
br = this->boundingRect();
qWarning() << "QGraphicsItem::boundingRect() size / x / y / w / h: " << br.size() << " / "
<< br.x() << " / "
<< br.y() << " / "
<< br.width() << " / "
<< br.height();

qWarning() << "boundingRect * item_scale: " << this->boundingRect().size() * this->scale();

关于c++ - QTransform scale 和 boundingRect.size() 的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30255375/

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