gpt4 book ai didi

qt - QGraphicsItem : emulating an item origin which is not the top left corner

转载 作者:行者123 更新时间:2023-12-04 19:31:44 25 4
gpt4 key购买 nike

我的应用程序正在使用Qt。

我有一个继承QGraphicsPixmapItem的类。

在这些项目上应用转换(例如,旋转)时,项目的原点(或枢轴点)始终位于左上角。

我想更改此原点,例如,当设置项目的位置时,这实际上将改变像素图的中心。

或者,如果我要应用旋转,则旋转的原点将是像素图的中心。

我还没有找到一种方法可以直接使用Qt开箱即用,所以我想到重新实现itemChange()是这样的:

QVariant JGraphicsPixmapItem::itemChange(GraphicsItemChange Change, const QVariant& rValue)
{
switch (Change)
{
case QGraphicsItem::ItemPositionHasChanged:
// Emulate a pivot point in the center of the image
this->translate(this->boundingRect().width() / 2,
this->boundingRect().height() / 2);
break;
case QGraphicsItem::ItemTransformHasChanged:
break;
}
return QGraphicsItem::itemChange(Change, rValue);
}

我认为这是可行的,因为 Qt's doc提到项目的位置及其转换矩阵是两个不同的概念。

但这是行不通的。

任何想法 ?

最佳答案

您想得太多了。 QGraphicsPixmapItem已经内置了此功能。请参见setOffset方法。

因此,要将项目原点设置在其中心,只需在每次设置像素图时执行setOffset( -0.5 * QPointF( width(), height() ) );

关于qt - QGraphicsItem : emulating an item origin which is not the top left corner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/906994/

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