Исправлена позиция 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
или есть более простой способ сделать это?
Спасибо.