Qt:使调整大小事件不移动场景中的对象

Qt: make resize event do not move the objects on the scene

我有以下代码,它创建了一个场景和一个绿色矩形(见下图)。问题是,当我调整 window 大小时,我希望矩形留在原处,但它会随之移动。我不知道从哪里开始:我需要弄乱场景、视图、调整事件大小甚至矩形本身吗?我尝试使用视图调整大小策略,但没有效果。提前致谢!

#include <QtWidgets>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QGraphicsScene scene(QRectF(-100, -100, 300, 300));
    QGraphicsView view(&scene);

    QRectF bonds = scene.itemsBoundingRect();
    view.fitInView(bonds, Qt::KeepAspectRatio);
    view.centerOn(0, 0);

    QGraphicsRectItem *rectItem =
            scene.addRect(QRectF(-30, -30, 120, 80),
                          QPen(Qt::black),
                          QBrush(Qt::green)
                          );
    rectItem->setFlags(QGraphicsItem::ItemIsMovable);

    view.show();

    return app.exec();
}

App window

您可以使用 view.setAlignment(Qt::AlignLeft | Qt::AlignTop); 轻松解决此问题,此功能会将场景对齐设置为 QGraphicsView.

的左上角

这就是您的代码的样子。

#include <QtWidgets>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QGraphicsScene scene(QRectF(-100, -100, 300, 300));
    QGraphicsView view(&scene);

    view.setAlignment(Qt::AlignLeft | Qt::AlignTop);

    QGraphicsRectItem *rectItem =
            scene.addRect(QRectF(-30, -30, 120, 80),
                          QPen(Qt::black),
                          QBrush(Qt::green)
                          );
    rectItem->setFlags(QGraphicsItem::ItemIsMovable);

    view.show();

    return app.exec();
}