5

我的应用程序正在使用 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 的文档提到项目的位置及其变换矩阵是两个不同的概念。

但它不起作用。

任何的想法 ?

4

3 回答 3

5

你想多了。QGraphicsPixmapItem 已经内置了这个功能。请参阅setOffset方法。

So to set the item origin at its centre, just do setOffset( -0.5 * QPointF( width(), height() ) ); every time you set the pixmap.

于 2009-05-26T03:56:02.203 回答
2

关于旋转的 Qt 文档

void QGraphicsItem::rotate (qreal 角度)

围绕其原点顺时针旋转当前项目的变换角度。要围绕任意点 (x, y) 平移,您需要将平移和旋转与 setTransform().

例子:

// Rotate an item 45 degrees around (0, 0).
item->rotate(45);

// Rotate an item 45 degrees around (x, y).
item->setTransform(QTransform().translate(x, y).rotate(45).translate(-x, -y));
于 2009-05-25T14:51:07.457 回答
-1

您需要创建一个旋转函数,将对象平移到父级的 (0, 0) 角进行旋转并将对象移动到原始位置。

于 2009-05-25T15:51:54.467 回答