Название: Проблема c отрисовкой QGraphicsItem'ов Отправлено: Crazy Sage от Июль 03, 2015, 12:19 Добрый день, возникла проблема, не могу сообразить в какую сторону вообще копать. Есть унаследованные от QGraphicsItem объект представляющий отрезок и объект представляющий ломаную, который просто состоит из набора дочерних отрезков. Периодически (не у всех объектов и не при всех размерах) часть отрезков просто не отрисовывается, хотя вход в функцию выполняется и если объект выбран, то "муравьи" вокруг него частично отрисовываются (только черным цветом, белый не отрисовывается). На скриншотах как раз в одном случае объект не выбран, в другом объект выбран и по "муравьям" видно, куда должна продолжаться синяя линия. Версия Qt 4.4.2
Проблема никогда не возникает с самостоятельными отрезками и происходит только с крайними (первыми или последними) отрезками ломаной. Код отрисовки отрезка Код: void LineItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *item, QWidget *widget) Название: Re: Проблема c отрисовкой QGraphicsItem'ов Отправлено: Racheengel от Июль 06, 2015, 15:12 а если boundingRect увеличить на пару пикселей?
Название: Re: Проблема c отрисовкой QGraphicsItem'ов Отправлено: Гурман от Июль 14, 2015, 23:34 Crazy Sage
Линии не отрисовываются полностью по двум возможным причинам: 1) boundingRect или shape меньше, чем ширина линии. Всё, что выступает - обрезается, в том числе, и выступающие за shape края линий. То есть, если линия шириной 3 пиксела нарисована по краю объекта, а его shape совпадает с центральными пикселами этой линии, то будет видна только часть линии шириной 2 пиксела. 2) Если объект или вьюпорт масштабируется афинными преобразованиями, то меняется толщина линий, если только она задана не равной 0 (если задана равной 0, толщина всегда 1 пиксел, независимо от масштаба), и при уменьшении масштаба линии будут вообще пропадать. Это вот довольно гнусно - хотелось бы иметь установку масштаба, меньше которого линии не должны уменьшаться и пропадать. Но простой способ сделать это, без наследования айтемов, не просматривается. |