QGraphicsItem отменить выбор проблема с перерисовкой

StackOverflow https://stackoverflow.com/questions/1589678

Вопрос

Очень простое приложение с графическим интерфейсом Qt:

  • На сцене у меня есть несколько кругов, реализованных как QGraphicsItem
  • boundingRect возвращает квадрат вокруг этого круга.
  • Метод 'shape' не переопределяется.

Проблема возникает, когда в методе paint() я добавил:

if (isSelected()) {
    painter->drawRect(re);
}

Выделение прорисовано хорошо, но отмена выделения не приводит к перерисовке.На уровне журнала я вижу, что элемент действительно потерял флаг выбора.Вызов update() из itemChange также бесполезен.Заранее благодарю вас за любое предложение.

Это было полезно?

Решение

Через 10 дней я вернулся к этой проблеме и обнаружил, что мой QGraphicsItem, созданный с setCacheMode(DeviceCoordinateCache); Боже мой!Глупая ошибка, когда эта строка была удалена (по умолчанию используется QGraphicsItem::NoCache), выделение перерисовано хорошо.

Другие советы

Вы также можете попробовать изменить QGraphicsView::MinimalViewportUpdate по умолчанию на FullViewportUpdate с помощью setViewportUpdateMode(QGraphicsView::FullViewportUpdate);

Или вы можете вызвать scene()->update();из элемента, чтобы запланировать перекраску.

Один из них требовался, по крайней мере, когда я продолжал менять флаг QGraphicsItem::ItemHasNoContents для элемента.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top