QGraphicsItem отменить выбор проблема с перерисовкой
-
22-09-2019 - |
Вопрос
Очень простое приложение с графическим интерфейсом 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 для элемента.