[SOLVED] QGraphicsScene draw a non transformable circle


I am trying to draw a 10 pixel radius circle on a QGraphicsScene that is anchored on the center and doesn’t transform (change size) when the scene is zoomed.

I have tried using the QGraphicsEllipseItem with the QGraphicsItem::ItemIgnoresTransformations flag, but it still transforms when the scene is zoomed.

Is this possible with standard graphics items, or do I need to create my own and do the paint event manually?


The following code does what I think you’re looking for. It creates a single 10 pixel immutable circle that anchors itself to the centre of the scene as well as 10 larger, movable, circles that obey the scaling transform applied…

#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;
  QGraphicsEllipseItem immutable(0, 0, 20, 20);
  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);
  view.setTransform(QTransform::fromScale(5, 2));
  return app.exec();

Answered By – G.M.

Answer Checked By – Candace Johnson (BugsFixing Volunteer)

Leave a Reply

Your email address will not be published. Required fields are marked *