0

QGraphicItemsの移動を制限するのに問題があります。

QVariant CustomRectItem::itemChange(GraphicsItemChange change, const QVariant& value)
{
    if (change == QGraphicsItem::ItemPositionChange && this->scene()) {

        // parameter value is the new position
        QPointF newPos = value.toPointF();
        QRectF rect = this->scene()->sceneRect();

        // keep the item inside the scene rect
        if (!rect.contains(newPos)) {
            if(newPos.x() < rect.x())
                newPos.setX(rect.x());
            return newPos;
        }
    }
    return QGraphicsItem::itemChange(change, value);
}

このコードは、アイテムがシーンの左側にドラッグされてサイズが大きくなるのを防ぐ必要があります。それはちょっとうまくいきます。私の問題は:

シーン作成時にアイテムに挿入します。オンはx=0(シーン座標)にあり、もう一方はx = 10(シーン座標)にあります。このコードでは、x=10の左側にある2番目のアイテムをドラッグできません。

QGraphicsItem ::scene()を呼び出すと、両方のアイテムに対して異なるシーンが返されるように見えます。

4

1 に答える 1

0

このスレッドで答えを見つけました: QGraphicsItem ::scenePos()が(0,0)を返し続けるのはなぜですか

問題はアイテムの作成にありました。それらをコンストラクターに配置しないように注意してください。シーンに登場した後、それらを配置する必要があります...

for (int i = 0; i < 3; ++i){
    for (int j = 0; j < 3; ++j){
        item = new CustomRectItem(0, 0, 20, 20);
        item->setFlags(QGraphicsItem::ItemIsMovable |
                       QGraphicsItem::ItemSendsScenePositionChanges);
        scene->addItem(item);
        item->setPos(i*30, j*30);
    }
}
于 2012-06-20T14:04:06.050 に答える