Исправлена позиция QGraphicsItem, без изменения поведения других QGraphicsItem в сцене

Этот вопрос связан с:Заставить QGraphicsItem оставаться на месте

Я хотел бы иметьQGraphicsItem в фиксированном месте при перемещении по сцене.

Предлагаемое решение состоит в том, чтобы переопределитьvoid paintEvent(QPaintEvent*) из подклассаQGraphicsView.

void MyGraphicsView::paintEvent(QPaintEvent*) {
  QPointF scenePos = mapToScene(0,0); // map viewport's top-left corner to scene
  myItem->setPos(scenePos);
}

Однако проблема в том, что я хочу, чтобы все остальное в сцене оставалось нетронутым, то есть, если я масштабирую или двигаю, я хочу, чтобы все остальныеQGraphicsItems вести себя по умолчанию.

Один из плохих способов решить эту проблему - позвонитьvoid QGraphicsView::paintEvent(QPaintEvent*) изнутриvoid MyGraphicsView::paintEvent(QPaintEvent*).

void MyGraphicsView::paintEvent(QPaintEvent* event) {
  QGraphicsView::paintEvent(event);

  QPointF scenePos = mapToScene(0,0); // map viewport's top-left corner to scene
  myItem->setPos(scenePos);
}

Тем не менее, это добавляет мерцание кmy_item так как он позиционируется первым сQGraphicsView::paintEvent(event); а затем с помощью добавленного кода

QPointF scenePos = mapToScene(0,0); // map viewport's top-left corner to scene
myItem->setPos(scenePos);

Вопрос в том, нужно ли мне зановоvoid MyGraphicsView::paintEvent(QPaintEvent*) с нуля и написать код для желаемого поведенияmyItem и поведение по умолчанию всех другихQGraphicsItemsили есть более простой способ сделать это?

Спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос