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のドキュメントでは、アイテムの位置とその変換行列は2つの異なる概念であると述べているため、これでうまくいくと思いました。

しかし、それは機能していません。

何か案が ?

4

3 に答える 3

5

難しく考えすぎだよ。QGraphicsPixmapItem には既にこの機能が組み込まれています。setOffsetメソッドを参照してください。

したがって、アイテムの原点をその中心にsetOffset( -0.5 * QPointF( width(), height() ) );設定するには、ピックスマップを設定するたびに行うだけです.

于 2009-05-26T03:56:02.203 に答える
2

回転に関するQtドキュメント

void QGraphicsItem::rotate ( qreal angle )

現在のアイテムの変換角度を原点を中心に時計回りに回転します。任意の点 (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 に答える