Ручки не перерисовываются? - PullRequest
0 голосов
/ 20 ноября 2011

Я пробовал писать маркеры для прямоугольника, чтобы его можно было изменить. Это вид работает:

http://programmingexamples.net/wiki/Qt/Utilities/HandleItem#HandleItem.cpp

Но как только ручки немного перетаскиваются, большинство из них превращается из сплошной заливки только в контур. Есть также странные артефакты, оставшиеся там, где раньше были ручки. В конце концов, некоторые из ручек перестают работать все вместе. Кто-нибудь может объяснить что-то из того, что я вижу? Является ли этот подход разумным? Я все еще не совсем уверен, почему boundingRect () должен быть реализован - кажется, что объекты должны просто сохранять свою позицию и размер в качестве переменных состояния?

Любые предложения приветствуются.

1 Ответ

2 голосов
/ 20 ноября 2011

Вероятно, ваша проблема возникает из-за того, что вы рисуете дескрипторы за пределами boundingRect () вашего элемента.

boundingRect() необходимо реализовать во многих случаях, потому что вы делаете интересные вещи в функции paint(), которая может выходить за пределы того, что базовый класс способен знать.

Хороший совет отладки для такого рода вещей - на самом деле нарисовать свой boundingRect () из функции paint () и убедиться, что видимый прямоугольник содержит ваш элемент соответствующим образом. Например:

painter->setPen( Qt::red )
painter->drawRect( boundingRect() );

Если вы видите, что любой из ваших предметов нарисован за пределами этого прямоугольника, то это вызовет артефакты рисования, поскольку QGraphicsScene полагается на свою точность, чтобы определить, какие части сцены необходимо перекрасить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...