簡體   English   中英

如何使用 QGraphicsItem::setPos() function

[英]How to use the QGraphicsItem::setPos() function

我無法弄清楚QGraphicsItem class 的setPos() function 是如何工作的。

我的Rect class 沒有父級,所以它的原點是相對於場景的。

在用鼠標移動矩形后,我嘗試將矩形放回 (0, 0),但根據我移動它的位置,它被放置在不同的位置。 我想這意味着場景的原點移動了,但是是什么導致了這種變化?

class Rect : public QGraphicsItem {
public:
    Rect(): QGraphicsItem()
    {
        setFlag(ItemIsMovable);
    }

    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
    {
        painter->drawRect(0, 0, 20, 20);
    }

    void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override
    {
            setPos(0, 0);
            update();
            QGraphicsItem::mouseReleaseEvent(event);
    }

    QRectF boundingRect() const
    {
            return QRectF(0, 0, 20, 20);
    }

private:
};
int main(int argc, char *argv[])
{
        QApplication a(argc, argv);
        QGraphicsScene scene;
        QGraphicsView view(&scene);
        Rect obj;
        scene.addItem(&obj);

        view.show();
        return a.exec();
}

當您創建 QGraphicsView 時,您最初接受默認設置。 例如,標准設置是水平居中。

在此處輸入圖像描述

另一個因素是默認區域大小可能達到最大大小。

您可以為場景設置自定義大小。 您可以使用graphicsView->setSceneRect(0,0,300,300); (例如)

    scene       = new QGraphicsScene(this);
    
    ui->graphicsView->setScene(scene);
    ui->graphicsView->setRenderHint(QPainter::Antialiasing);
    ui->graphicsView->setSceneRect(0,0, 300,300);
    
    rectItem    = new QGraphicsRectItem(0,0, 100, 100);
    rectItem->setPen(QPen(Qt::darkMagenta, 2));
    rectItem->setBrush(QGradient(QGradient::SaintPetersburg));
    rectItem->setPos(190,10);

    scene->addItem(rectItem);

在此處輸入圖像描述 在此處輸入圖像描述

總而言之:如果您想使用固定值。 也許最好知道總大小。 (從你的代碼中不清楚,這就是我給出這個例子的原因)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM