QGraphicsScene 画一个不可变形的圆

QGraphicsScene draw a non transformable circle

我正在尝试在锚定在中心的 QGraphicsScene 上绘制一个 10 像素半径的圆,并且在缩放场景时不会变换(更改大小)。

我已经尝试使用带有 QGraphicsItem::ItemIgnoresTransformations 标志的 QGraphicsEllipseItem,但是当场景被缩放时它仍然会变形。

标准图形项目是否可行,或者我是否需要创建自己的图形项目并手动执行绘制事件?

以下代码可以满足我认为您正在寻找的内容。它创建一个 10 像素的不可变圆圈,将自身锚定到场景的中心,以及 10 个更大的、可移动的圆圈,这些圆圈遵循应用的缩放变换...

#include <iostream>
#include <QApplication>
#include <QGraphicsEllipseItem>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QPainter>

int main (int argc, char **argv)
{
  QApplication app(argc, argv);
  QGraphicsView view;
  QGraphicsScene scene;
  view.setScene(&scene);
  QGraphicsEllipseItem immutable(0, 0, 20, 20);
  immutable.setFlag(QGraphicsItem::ItemIgnoresTransformations);
  immutable.setPen(Qt::NoPen);
  immutable.setBrush(Qt::blue);
  scene.addItem(&immutable);
  QObject::connect(&scene, &QGraphicsScene::sceneRectChanged,
                   [&](const QRectF &rect)
                     {
                       immutable.setPos(rect.center() - 0.5 * immutable.boundingRect().center());
                     });
  for (int i = 0; i < 10; ++i) {
    auto *e = new QGraphicsEllipseItem(20, 20, 50, 50);
    e->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
    scene.addItem(e);
  }
  view.show();
  view.setTransform(QTransform::fromScale(5, 2));
  return app.exec();
}